Spilmotorprojekt

jeppester
Antal: 228
Tilmeldt:
10-08-2006
User is offline
Spilmotorprojekt

Hej Alle,

Jeg arbejder på en JavaScript-baseret spilmotor, baseret på canvas. Projektet er udsprunget af et behov for at kunne genbruge dele fra de spil jeg har lavet.

Jeg har arbejdet på spilmotoren i ca. et års tid nu, på fritidsbasis, og har efterhånden fået bygget følgende features:

  • Let opsætning af canvas og main loop
  • Classes og inheritance (som man nu kan bygge det i JS)
  • Classes til ofte brugte ting:
    • Sprite
    • TextBlock
    • etc.
  • Lag
  • Animationer - dvs. tween af objekters numeriske properties
  • Themes (billeder og lyd) og preload af dem
  • Bitmap-baserede kollisionstjek
  • En minifier
  • Sikkert flere ting som jeg har glemt

Spilmotoren kan hentes her:
http://jsorensen.dk/JsEngine.tar.gz

Jeg har også lavet en halvfærdig prototype til en hjemmeside, som indeholder lidt brugbar dokumentation. Siden er password-beskyttet (fordi den på ingen måde er klar til at blive offentlig endnu), men I kan få adgang i en PM hvis I vil se den.

Efterhånden har projektet nået et omfang hvor jeg føler et behov for at dele det, samt for at inddrage andre personer end mig selv. Det er selvfølgelig mit håb at andre en dag kan få glæde af mit arbejde :).

Jeg har brug for hjælp til:

  • Kvalitetskontrol og test
  • Dokumentation
  • Finde ud af hvilken OSS licens som passer bedst
  • Finde ud af hvordan jeg kommer videre med projektet
  • Nye features!
    • Understøttelse af spritesheets
    • Map editor
    • Hvad I har lyst til at bygge

Er der nogen herinde som har lyst til at hjælpe?

Hvis I vil se eksempler på hvad man kan lave med spilmotoren, ligger der et par mere eller mindre simple spil på min hjemmeside:
http://jsorensen.dk/Spil/CCD
http://jsorensen.dk/Spil/AstroidMadness
http://jsorensen.dk/Spil/Donk
http://jsorensen.dk/Spil/Pong


Marcus
Antal: 255
Tilmeldt:
11-01-2010
User is offline
Ser yderst interessant ud.

Ser yderst interessant ud. Du kunne eventuelt ligge det op på GitHub, da det vil kunne gøre samarbejdet om spilmoteren nemmere.


paldepind
paldepind's picture
Antal: 1649
Tilmeldt:
20-02-2010
User is offline
Det er nogle meget flotte

Det er nogle meget flotte demo spil du har!

Jeg har ikke kigget på koden, men har du skrevet det hele fra bunden? Der findes i forvejen glimrende biblioteker til tweening og JavaScript inheritance.(Opdatering: Nu kiggede jeg på koden alligevel, og det ser ud som om at du laver inheritance ved at bruge prototyper. Det er en deprimerende syntaks). Hvorfor ikke hive Underscore el. lign. ind, og bruger deres inheritance features?)

Hvordan mener du at din spil motor adskiller sig fra de andre på markedet? Impact f.eks. virker til at være ret solid, men den er ikke fri, så det er et problem.

Mht. licens vil jeg foreslå MIT. Den er nærmest de facto standard for JavaScript biblioteker og frameworks.

Har du overvejet noget netværks integration? Noget indbygget support for Socket.IO kunne være en fed feature.


jeppester
jeppester's picture
Antal: 228
Tilmeldt:
10-08-2006
User is offline
Tak for feedback.

Tak for god feedback!

Mht. prototyping, så har jeg brugt det fordi jeg synes det fungerer fint. Jeg ved at man kunne gøre koden mere kompakt med hjælp fra diverse libraries, men jeg vil meget gerne undgå at bygge en masse ekstern kode ind i min engine. Jeg synes at det er en styrke at koden ikke afhænger af andre libraries, og at den bruger en rimelig genkendelig JavaScript-syntaks, som er let at forstå (efter min mening).

Eftersom at projektet ikke er udsprunget af et behov for at bygge noget som kunne konkurrere med andre engines, har jeg på intet tidspunkt forsøgt at differentiere projektet fra andre engines. I stedet har jeg bygget de features som jeg synes var nødvendige, og selvfølgelig forsøgt at lave dem på den mest gennemtænkte og genbrugelige måde.

Netværksintegration er i øvrigt en rigtigt spændende feature, som helt sikker skal på todo-listen.

Jeg smider projektet på github lidt senere.


jeppester
jeppester's picture
Antal: 228
Tilmeldt:
10-08-2006
User is offline
Så kom det på github

Så fik jeg lagt projektet på github:
https://github.com/jeppester/JsEngine


paldepind
paldepind's picture
Antal: 1649
Tilmeldt:
20-02-2010
User is offline
Eftersom at projektet

#3: Eftersom at projektet ikke er udsprunget af et behov for at bygge noget som kunne konkurrere med andre engines, har jeg på intet tidspunkt forsøgt at differentiere projektet fra andre engines.Men hvorfor skrev du så din egen engine, i stedet for blot at bruge en eksisterende?

Jeg kan sagtens forstå din holdnign mht. biblioteker, Men Underscore er ellers meget simpelt og minimalt bibliotek, der giver rigtig meget nyttigt funktionalitet som man ofte står og skal bruge.


jeppester
jeppester's picture
Antal: 228
Tilmeldt:
10-08-2006
User is offline
Jeg synes ikke at de engines

Jeg synes ikke at de engines jeg kunne finde var gode nok (af den ene eller anden årsag):
- Impact: Er ikke gratis og fri
- GameQuery: Er baseret på jQuery, som slet ikke er ikke er til spil. Synes det er et forkert udgangspunkt og jQuery indbyder ikke rigtigt til at arbejde objektorienteret.
- Crafty: Stødte jeg ikke på, må jeg indrømme.

I det hele taget synes jeg ikke at der var et "let" valg, så jeg besluttede mig for at lave mit eget.
Det hænger selvfølgelig også sammen med at jeg synes det er rigtigt spændende at vide hvordan at koden virker og at bygge ting fra bunden.

Edit:
I øvrigt har jeg siden taget et kig på Crafty. Synes at syntaksen er så anderledes fra min engine, at min engine har en eksistensberettigelse.


Prezioso
Prezioso's picture
Antal: 551
Tilmeldt:
17-05-2008
User is offline
Nogen gange er det vel

Nogen gange er det vel sjovere at lave selv? Synes sq det er et godt stykke arbejde. :) Skal have kigget lidt mere på det.


paldepind
paldepind's picture
Antal: 1649
Tilmeldt:
20-02-2010
User is offline
Det hænger

#6: Det hænger selvfølgelig også sammen med at jeg synes det er rigtigt spændende at vide hvordan at koden virker og at bygge ting fra bunden.Det giver god mening. Men hvis du vil tage dette videre, fra at være dit eget private hobby projekt, så tror jeg, at du skal overveje hvad præcis det er du kan, som de andre ikke kan. Verden er bestem ikke fattig på JS spil motorer. Her er intet mindre end 51 styks.


MollDenn88
Antal: 81
Tilmeldt:
25-05-2011
User is offline
LIKE BIG TIME!

kan kun sige en ting SUPER fedt projekt! Dejligt at se der er flere personer af din støbning, som har mod på at lave sådan et stort projekt fra bunden! ønsker dig alt held og lykke fremadrettet med din JS spil motor.

Har det selv på præcis samme måde med hensyn til udvikling. hader og være afhænning af andre libs. og andre projekter!
hvis alt er bygget fra bunden og desuden er opbygget ordenligt er det nemt at udvide og videreudvikle på.

Håber der er andre som ser lyset i dit projekt og ønsker at deltage og være en aktiv del i udviklingen af den.

PS. HADER JANTELOV!


batnas
Antal: 18
Tilmeldt:
19-04-2010
User is offline
Kort kommentar

Hej

Skimmede lige hurtigt koden gennem, og umiddelbart ser det fint ud..

Jeg kunne ikke helt gennemskue om du har fallback i din canvas. Nogle mobil-browsere (jeg har især oplevet det med android) vil ikke tegne canvas'et hvis der ikke er fallback.

\\Batnas


jeppester
jeppester's picture
Antal: 228
Tilmeldt:
10-08-2006
User is offline
Canvas fallback

#10:
Jeg har endnu ikke lavet noget canvas-fallback, hvilket jeg nok burde gøre af hensyn til IE8-brugerne.

Indtil videre har jeg ikke fundet nogen browser med canvas, hvor min engine ikke har virket. (har testet Chrome, Firefox, Safari, Safari Mobile, Android's browser).
Derfor kunne jeg egentlig godt tænke mig at vide under hvilke omstændigheder at du har oplevet at canvas ikke har virket på android?

Så kan jeg nemlig få testet om det også rammer min engine.

#8:
Som du selv nævner, er der ret mange JavaScript game engines. Derfor er det også en ret stor opgave lige at nævne hvordan min adskiller sig fra de andre.

Hvis jeg skulle fremhæve et par features ved min engine, som jeg ser som styrker ift. eksempelvis crafty, er det nok:
- Themes: Indlæsning af billeder og lyde er som udgangspunkt adskilt fra selve spilkoden, og indlæses sammen med spilmotoren. Desuden kan man meget let skifte mellem themes uden at skulle skifte hvert enkelt spilobjekts bitmap.

- OOP-indbydende syntaks: Spilmotoren er bygget sådant op, at det er meget let at dele sit projekt op i mange classes og filer, og på den måde holde godt styr på sin kode - uden at skulle tilføje en masse script-tags til HTML'en. Jeg har selvfølgelig også lavet et script til at pakke alle filerne sammen, så et spil til sidst kan pakkes og distribueres som en enkelt .js-fil.

- Compositing: Hvis man har lyst kan man sætte compositing på sine objekter og skabe effekter som ikke er mulige at lave med en DOM-baseret engine (Jeg bruger det eksempelvis til at lave en lyseffekt i den nyeste version af Cliff City Defence).

- Scenes: En kombination af tweens og en timeline, som kan bruges til at lave flash-agtige animationer. (min scene editor er dog stadigvæk ikke helt klar)


jeppester
jeppester's picture
Antal: 228
Tilmeldt:
10-08-2006
User is offline
Hjælp til navngivning

Hej igen,

Så er jeg snart klar med en hjemmeside til spilmotoren hvor man kan downloade spilmotoren, finde dokumentation og spille de spil som jeg har bygget. Jeg har dog et enkelt spørgsmål som jeg gerne vil have andres holdning til. Det er altid godt at spare lidt, om ikke andet, så for at blive mere sikker på at man gør det rigtige.

Hvad ville I mene at en "class" bør kaldes i JavaScript? JavaScript indeholder jo egentlig ikke classes, men i stedet funktioner som kan bruges til at instantiere objekter.
Jeg synes at denne terminologi gør det mere end irriterende at skrive præcis dokumentation. Derfor hælder jeg nok mest til bare at bruge ordet "class" og så "object" eller "instance" til instantierede objekter.

Men, hvad mener I?