我正在尝试创建一个平台游戏,我正试图让“player1”在点击“平台”时停止。到目前为止,这是我的代码,
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;
}
}
但是hitTestObject函数(enterFrameHandler)无法正常工作,并且始终采用“else”路径。
请帮忙!
答案 0 :(得分:1)
发布的代码对我来说很好。我会寻找其他一些愚蠢的错误 - 例如,如果您复制并粘贴了影片剪辑,那么您可能在名为“platform”的舞台上有多个剪辑,在这种情况下,您的引用可能无法解析为您打算。或者其他类似的东西。
要追踪它,请尝试致电:
trace( player1.getBounds(stage) );
trace( platform.getBounds(stage) );
它会告诉你Flash认为这些剪辑的边界框在哪里。我的猜测是代码会返回一些不同于你期望的东西,并且解决这种差异将显示错误的位置。