大家下午好!陣列上的ActionScript 3.0 HitTestObject
我在使用hitTestObject的ActionScript 3.0中遇到了一個小問題。 如果我的角色碰到了一個平臺(我正在製作一個簡單的平臺遊戲),我想選擇。 我有一個平臺對象exproted爲動作腳本,並且我將這個孩子添加到一個數組中。 直到這一切一切順利,我可以把他們放在舞臺上等
我已經寫了chechk週期如果我caharacter擊中平臺,但它不能正常工作。我的角色落在了第一個平臺上,只有當它碰到最後一個平臺時才停下來。 (所以對於陣列中的最後一個,效果很好。)
現在這裏是我的代碼的這一部分,我希望有人能幫助我。 :)
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);
}
這部分的問題,HITTESOBJECT僅適用於THE LAST平臺
PORK1_mc.hitPork_mc這是我的性格(hitPork_mc是爲了更好的HitTestObject一種無形的矩形。所以,我寫我的焦炭。直到最後一個,他落在最後一個並停止下降,所以對於陣列中的最後一個平臺它完美地工作。 我不想在我的代碼上改變很多,只有在hitTest部分if它的可能性。
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;
}
}
}
感謝您提前給予的幫助!
大家好! 我今晚解決了這個問題。我已經提出了這個詞:返回if在velocity = 0;它完美的工作,但我仍然不明白爲什麼現在它的作品。 – user1907809