大家下午好!
我在使用 hitTestObject 的 ActionScript 3.0 中有一个小问题。我想检查我的角色是否击中平台(我正在制作一个简单的平台游戏。)。我有一个用于操作脚本的平台对象,我将子对象添加到数组中。直到此时一切顺利,我可以将它们放在舞台上等。
如果我的字符碰到平台但它不能正常工作,我已经写了一个循环来检查。我的角色从第一个平台跌落,只有在撞到最后一个平台时才停止跌落。(所以对于数组中的最后一个,它运行良好。)
现在这是我的代码中的这一部分,我希望有人可以帮助我。:)
import flash.events.Event;
import flash.geom.Rectangle;
stop();
var vy:Number=0;
var gv:Number=1;
var sebesseg:Number=4;
var jumped:Boolean=false;
var stay:Boolean=false;
var level:Array=new Array ;
var gravity:Number=2;
var velocity:Number=1.1;
var platform0:MovieClip=new platform ;
level.push(addChild(platform0));
level[0].x=200;
level[0].y=450;
var platform1:MovieClip=new platform ;
level.push(addChild(platform1));
level[1].x=700;
level[1].y=650;
var platform2:MovieClip=new platform ;
level.push(addChild(platform2));
level[2].x=1000;
level[2].y=800;
stage.addEventListener(Event.ENTER_FRAME, cameraFollowCharacter);
function cameraFollowCharacter(evt:Event) {
root.scrollRect=new Rectangle(PORK1_mc.x-(stage.stageWidth/2)+320,PORK1_mc.y-(stage.stageHeight/2)-50,stage.stageWidth,stage.stageHeight);
}
stage.addEventListener(KeyboardEvent.KEY_DOWN,gomb);
function gomb(k:KeyboardEvent):void {
trace(k);
if (k.keyCode==37) {
if (sebesseg==2) {
sebesseg=sebesseg+0;
} else {
sebesseg-=1;
}
} else if (k.keyCode==39) {
sebesseg+=1;
} else if (k.keyCode==Keyboard.ESCAPE) {
stop();
root.scrollRect=new Rectangle (stage.x,stage.y,stage.stageWidth,stage.stageHeight);
gotoAndStop(2);
} else if (k.keyCode==Keyboard.F1 && stay==false) {
stage.frameRate=0;
stay=true;
} else if (k.keyCode==Keyboard.F1 && stay==true) {
stage.frameRate=24;
stay=false;
}
}
stage.addEventListener(Event.ENTER_FRAME, megy);
function megy(e:Event):void {
PORK1_mc.x+=sebesseg;
gravity*=velocity;
PORK1_mc.y+=gravity;
//trace(velocity);
}
这部分是问题,HTTESOBJECT 仅适用于最后一个平台
PORK1_mc.hitPork_mc 这是我的角色(hitPork_mc 是一个不可见的矩形,用于更好的 HitTestObject。所以当我写我的字符时。从平台跌落直到最后一个,他最后跌倒并停止跌落,所以对于阵列中的最后一个平台它工作得很好。我不想对我的代码进行太多更改,如果可能的话,只在 hitTest 部分进行更改。
this.addEventListener(Event.ENTER_FRAME, handleEnterFrame);
function handleEnterFrame(e:Event):void {
for (var i:int = 0; i < level.length; i++) {
if (level[i].hitTestObject(PORK1_mc.hitPork_mc)) {
velocity=0;
} else {
velocity=1.1;
gravity=4;
}
}
}
提前感谢您的每一个帮助!