Apple gjort en kritisk trekk når det valgt iOS-enheter å bruke HTML5 enn flash -spillere . Til tross for kritikken , er HTML5 begynner å ta form som en fledging plattform i seg selv , særlig for å lage videospill. Opprette en grunnleggende HTML5 spillet krever litt kunnskap når det kommer til koding og programmering , men heldigvis trenger du ikke å være en fullverdig spill designer til å lage en grunnleggende spillet . Du trenger
Box2D Physics Engine
Vis flere instruksjoner
en
Lag en ny HTML -fil ( index.html ) i Box2D og kopiere js og lib kataloger fra Box2D - js prosjektet til spill -mappen . Sett inn følgende filer som ett skript fil i HTML-filen : en
<- [if IE] > < script src =' js/box2d/collision/shapes/b2Shape.js '> < script src =' js/box2d/collision/shapes/b2BoxDef.js '> < script src =' js/box2d/collision/shapes/b2CircleShape.js '> < script src =' js/box2d/collision/shapes/b2PolyDef.js '> < /script >
5
Åpne game.js og sett inn følgende kode : ?
utsikt plaincopy til clipboardprint //Noen variabler som Skal vi bruke i denne demoen Var initId = 0; Var spiller = function () { this.object = null; this.canJump = false; }; Div. verden; Var ctx ; Var canvasWidth ; Var canvasHeight ; VAR nøkler = [ ]; //HTML5 onLoad hendelsen Event.observe ( vindu , ' last ' , function () { verden = createWorld (); //box2DWorld ctx = $ ( "spillet" ) getContext ( '2 d '); . //2 Var canvasElm = $ ( "spillet" ); canvasWidth = parseInt ( canvasElm.width ) ; canvasHeight = parseInt ( canvasElm.height ) ; initGame (); //3 trinn ( ), //4 //5 window.addEventListener (' keydown ' , handleKeyDown , true); window.addEventListener (' keyup ' , handleKeyUp , true); });
6
Søk etter createWorld ( )-funksjonen i boxdutils.js og innspill denne koden :
< p > funksjon createWorld ( ) { //her vi skaper vår verden innstillinger for kollisjoner Var worldAABB = new b2AABB (); worldAABB.minVertex.Set ( -1000 , -1000 ) ; worldAABB.maxVertex.Set ( 1000 , 1000 ), //satt tyngdekraften vektor Var vekt = ny b2Vec2 ( 0 , 300 ); Var doSleep = true; //init vår verden og returnere sin verdi Div. verden = new b2World ( worldAABB , gravitasjon , doSleep ), tilbake verden ;}
7
Kopier koden under og lim den inn game.js å skape form definisjon , sette opp tetthet, format brukerdata , lage kroppen definisjon, sette opp og skape kroppen i spillverdenen :
< p > funksjon initGame ( ) { //oppretter to store plattformer createBox (world , 3, 230, 60, 180 , true , "bakken" ); createBox ( verden , 560 , 360, 50 , 50 , true , "bakken" ); //lage små plattformer for (var i = 0 ; i < 5; i + + ) { createBox (world , 150 + ( 80 * i) , 360, 5 , 40 + (i * 15 ) , sant, "bakken" ) ;} //opprette spiller ball Var ballSd = new b2CircleDef (); ballSd.density = 0,1; ballSd.radius = 12; ballSd.restitution = 0.5; ballSd.friction = 1; ballSd.userData = ' spiller '; Var ballBd = ny b2BodyDef (); ballBd.linearDamping = .03 ; ballBd.allowSleep = false; ballBd.AddShape ( ballSd ) ; ballBd.position.Set ( 20,0 ) ; player.object = world.CreateBody ( ballBd ) ;} Inne < ; code > box2dutils.js < /code > , vi har laget en funksjon , kalt createBox < /code > . Dette skaper et statisk legeme rektangel . funksjon createBox ( verden, x , y , bredde , høyde, fast , userdata ) { if ( typeof (fast) == "udefinert" ) fast = true; //1 Var boxSd = new b2BoxDef (); if ( fast ! ) boxSd.density = 1.0; //2 boxSd.userData = brukerdata , //3 boxSd.extents.Set (bredde , høyde ), //4 Var boxBd = new b2BodyDef (); boxBd.AddShape ( boxSd ), //5 boxBd.position.Set ( x , y ), //6 retur world.CreateBody ( boxBd ) }
8 Åpen game.js manus og kopier og lim inn følgende kode for å gjengi tid :
utsikt plaincopy til clipboardprint funksjon trinn ( ) {var stepping = false; Var tidsintervallet = 1.0/60 ; Var iterasjon = 1 //1 world.Step ( tidsintervallet , iterasjon ), //2 ctx.clearRect ( 0 , 0 , canvasWidth , canvasHeight ) ; drawWorld ( verden, ctx ), //3 setTimeout (' trinn ( )', 10 ) ;}
9
Sett inn følgende kode i box2dutils.js til tegne "ledd " av spiller organer : en
funksjon drawWorld ( verden , kontekst ) { for (var j = world.m_jointList , j , j = j.m_next ) { drawJoint ( j , kontekst ); } for (var b = world.m_bodyList , b , b = b.m_next ) { for (var s = b.GetShapeList (); ! s = null; s = s.GetNext ( ) ) { drawShape (s, kontekst) ; } } }
10
Sett en ekstra sløyfe for å trekke alle organer : en
funksjon drawShape ( form, kontekst) { context.strokeStyle = '# 000000 '; context.beginPath (); bryteren ( shape.m_type ) {case b2Shape.e_circleShape : {var sirkel = form, Var pos = circle.m_position ; Var r = circle.m_radius enheten tilbe segmenter = 16,0 ; Var theta = 0,0 ; Var dtheta = 2,0 * Math.PI /segmenter //draw sirkel context.moveTo ( pos.x + r , pos.y ); for (var i = 0 ; i < segmenter ; i + + ) {var d = new b2Vec2 ( r * Math.cos ( theta ) , r * Math.sin ( theta )); Var v = b2Math.AddVV ( pos , d ) ; context.lineTo ( vx , vy ) ; theta + = dtheta ;} context.lineTo ( pos.x + r , pos . y ), //trekke radius context.moveTo ( pos.x , pos.y ) ; Var ax = circle.m_R.col1 ; Var pos2 = new b2Vec2 ( pos.x + r * ax.x , pos.y + r * ax.y ) ; context.lineTo ( pos2.x , pos2.y ) ;} break ; tilfelle b2Shape.e_polyShape : {var poly = form, Var tV = b2Math.AddVV ( poly.m_position , b2Math.b2MulMV ( poly . m_R , poly.m_vertices [ 0 ] ) ) ; context.moveTo ( tV.x , tV.y ); for (var i = 0 ; i < poly.m_vertexCount ; i + + ) {var v = b2Math.AddVV ( poly . m_position , b2Math.b2MulMV ( poly.m_R , poly.m_vertices [ i] )); context.lineTo ( vx , vy ) ;} context.lineTo ( tV.x , tV.y ) ;} break; } context.stroke (); }
11
Lag interaktivitet i spillet med følgende kode :
funksjon handleKeyDown ( evt ) { tastene [ evt.keyCode ] = true ;} funksjon handleKeyUp ( evt ) { tastene [ evt.keyCode ] = false; } //deaktivere vertikal rulling fra piler < img src = " http://net.tutsplus.com/wp-includes/images/smilies/icon_smile.gif " alt = ":)" class = " wp - smiley "> document.onkeydown = function ( ) {return event.keyCode ! = 38 && event.keyCode ! = 40 }
12 < p> Produksjon spiller dueller og hastighet ved å legge inn følgende kode inn i trinn ( )-funksjonen :
funksjon handleInteractions ( ) { //pil opp //1 Var kollisjon = world.m_contactList ; player.canJump = false ; if ( kollisjon = null ! ) { if ( collision.GetShape1 ( ) GetUserData ( ) == ' spiller '