PDA

Volledige versie bekijken : Verschillende jump hoogtes


Xeptic
%Europe/Berlin %493 %2008, 12:50
Ik heb een probleempje met een game die ik probeer te maken. Ik heb nog niet zo veel ervaring met Actionscript 3 (dit is het eerste substantiele stuk code dat ik ooit gemaakt hebt) dus ik hoop dat de pro's me wel kunnen helpen.

Het probleem is dat wanneer de w-toets ingedrukt wordt, het karakter maar 1 keer hoort te springen, momenteel krijg ik verschillende hoogtes. Ik ga ervan uit dat het ligt aan de manier waarop de characterMovement functie op elke frame wordt aangeroepen en wanneer de Keyboard events geregistreerd worden. Ik ben er een paar uur mee bezig geweest, maar ik ben er nog steeds niet uit.

Hier (http://spamtheweb.com/ul/upload/270708/46115_evasion2.php) is het .swf bestand.


var ground:Ground = new Ground();
var hero:Hero = new Hero();
var ax:Number = 0;
var ay:Number = 0;
var vx:Number = 0;
var vy:Number = 0;
var gravity:Number = 0.15;
var friction:Number = 0.9;
var jump:Boolean = false;
var inAir:Boolean = true;

stage.addEventListener(Event.ENTER_FRAME, gameLoop);
stage.addEventListener(KeyboardEvent.KEY_DOWN, onKeyIsDown);
stage.addEventListener(KeyboardEvent.KEY_UP, onKeyIsUp);

init();

function init():void {
ground.x = -200;
ground.y = 596;
addChild(ground);

hero.x = 200;
hero.y = 550;
addChild(hero);
}

function gameLoop(event:Event) {
characterMovement();
}

function onKeyIsDown(event:KeyboardEvent):void {
switch (event.keyCode) {
case 87 :
jump = true;
break;
case 65 :
ax = -1.5;
break;
case 68 :
ax = 1.5;
break;
case 83 :
break;
default :
break;
}
}

function onKeyIsUp(event:KeyboardEvent):void {
switch (event.keyCode) {
case 87 :
jump = false;
break;
case 65 :
ax = 0;
break;
case 68 :
ax = 0;
break;
case 83 :
break;
default :
break;
}
}

function characterMovement():void {
if (checkAir() == true) {
friction = 0.8;}
else {friction = 0.9;}

if (jump == true && checkAir() == false) {
ay = -10;
} else {
ay = 0;
}

vx += ax;
vy += ay;
vy += gravity;
vx *= friction;
hero.x += vx;
hero.y += vy;
checkGroundCollision();
checkWalls();
//ay = 0;
}

function checkAir ():Boolean {
if (!hero.hitTestObject(ground)) {
return true; }
else {return false;}
}

function checkGroundCollision():void {
if (hero.hitTestObject(ground)) {
hero.y = ground.y - ground.height / 2 - hero.height / 2;
}
}

function checkWalls():void {
if (hero. x + hero.width / 2 > stage.stageWidth) {
hero.x = stage.stageWidth - hero.width / 2;
} else if (hero.x - hero.width / 2 < 0) {
hero.x = 0 + hero.width / 2;
} else {
}
}

Dauntless
%Europe/Berlin %499 %2008, 12:59
Kan je misschien de .fla omhoog gooien? Dan is het veel eenvoudiger te achterhalen wat er mis gaat :).

Ps: Hang je niet vast aan de QWERTY layout; In België (en Frankrijk) heb je AZERTY toetsenborden waardoor het spelen van je game erg moeilijk wordt :).

Xeptic
%Europe/Berlin %506 %2008, 13:09
Ps: Hang je niet vast aan de QWERTY layout; In België (en Frankrijk) heb je AZERTY toetsenborden waardoor het spelen van je game erg moeilijk wordt :).

Alvast bedankt voor die tip :)

Hier (http://spamtheweb.com/ul/upload/270708/47270_evasion2.fla) is de .fla

Dauntless
%Europe/Berlin %526 %2008, 13:38
Wanneer je de grond raakt moet 'jump' op false (je springt immers niet meer) en moet vy op 0 gezet worden.

Xeptic
%Europe/Berlin %530 %2008, 13:44
Wanneer je de grond raakt moet 'jump' op false (je springt immers niet meer) en moet vy op 0 gezet worden.

Je hebt de rest van m'n zondag gered, thanks :)