0

J'essaye de créer un jeu de plateforme et j'essaye de faire arrêter "player1" quand il frappe une "plate-forme". voici mon code jusqu'à présent,La détection de collision hitTestObject ne fonctionne pas dans as3!

gotoAndStop("gameStart"); 

import flash.display.MovieClip; 
import flash.events.*; 
import flash.ui.Keyboard; 
import flash.ui.*; 


import flash.utils.Timer; 
import flash.events.TimerEvent; 

player1.gotoAndStop("nothing"); 


//private var speed:Number = 0; 
//private var maxspeed:Number = 4; 

var myTimer:Timer = new Timer(10,0); 


stage.focus = this; 


player1.addEventListener(Event.ENTER_FRAME,enterFrameHandler); 
/* 
myTimer.addEventListener(TimerEvent.TIMER,someFunction); 



myTimer.start(); 

function someFunction(event:TimerEvent) { 
player1.y += 2; 


} 
*/ 

function setup() { 
stage.addEventListener(KeyboardEvent.KEY_DOWN, reactToArrowKeys); 
} 
setup(); 


function reactToArrowKeys(keyEvent:KeyboardEvent) { 

if (keyEvent.keyCode == 37) { 

    if (player1.x > 0) { 
    player1.x -= 5; 
    } 

} else if (keyEvent.keyCode == 39) { 

    if (player1.x < 700) { 
    player1.x += 5; 
    } 

} 


} 


function enterFrameHandler(e:Event):void { 
    if (player1.hitTestObject(platform)) { 
    trace("hitting"); 
    } else { 
    player1.y += 4; 
    } 
    } 

cependant la fonction hitTestObject (enterFrameHandler) ne fonctionne pas correctement et toujours prendre la route « autre ».

aidez s'il vous plaît!

+0

pouvez-vous fournir plus d'informations? parce que ça marche pour moi. J'ai créé un MovieClip appelé player1 et une brique appelée platform et il détecte le hit. – Allan

Répondre

1

Le code affiché fonctionne très bien pour moi. Je chercherais une autre sorte d'erreur stupide - par exemple, si vous avez copié et collé des clips vidéo, vous pouvez avoir plus d'un clip sur la scène nommée "plateforme", auquel cas votre référence pourrait ne pas correspondre à celle que vous avez intention. Ou quelque chose d'autre dans ce sens.

Pour le suivre vers le bas, essayez d'appeler:

trace(player1.getBounds(stage)); 
trace(platform.getBounds(stage)); 

qui vous dira où le flash pense que les boîtes englobantes de ces clips sont. Ma conjecture est que le code retournera quelque chose d'autre que ce à quoi vous vous attendez, et la résolution de cet écart montrera où le bogue est.

+0

ooooooh ok je ne savais pas que vous ne pourriez pas avoir plus que sur la plate-forme nommée de clip! Merci! –

+0

Oui, si vous faites, quand vous vous référez à "plate-forme" Flash, il suffit de choisir l'un d'entre eux. Bonne chance! – fenomas

Questions connexes