[英]AS3 - hitTestObject object hovering?
我正在嘗試在ActionScript 3.0中構建2D游戲,但我的Hittest遇到了問題。 我在這里有此代碼
import flash.ui.Keyboard;
import flash.events.Event;
import flash.events.KeyboardEvent;
myChar.addEventListener(Event.ENTER_FRAME, update);
stage.addEventListener(KeyboardEvent.KEY_DOWN, onKeyDown);
stage.addEventListener(KeyboardEvent.KEY_UP, onKeyUp);
stage.addEventListener(Event.ENTER_FRAME, letsSee);
var keys:Array=[];
function update(e:Event):void {
myChar.y+=10;
if (keys[Keyboard.RIGHT]) {
myChar.x+=10;
}
if (keys[Keyboard.LEFT]) {
myChar.x-=10;
}
}
function onKeyDown(e:KeyboardEvent):void {
keys[e.keyCode]=true;
}
function onKeyUp(e:KeyboardEvent):void {
keys[e.keyCode]=false;
}
function letsSee(e:Event):void {
if (myChar.hitTestObject(myLevel)==true) {
myChar.y-=10;
}
}
一切正常,但是letSeeSee函數中的hitTestObeject無法按我的要求工作,我希望我的角色(myChar)出現在platoe(myLevel)上,但myChar一直徘徊。
如何在沒有對象懸停的情況下制作hitTestObject?
徘徊是因為您以與碰撞時他跌倒的速度相同的速度抬起他。
假設角色從5開始,物體在20。在2幀中,角色將在25與物體碰撞。 發生這種情況時,您將他上移10,使他上升到15,因此他在5上方懸停。然后在下一幀中發生了完全相同的事情。 因此,他將一直徘徊。
一種解決方案是將角色上移到其在對象“內部”的數量。 因此,如果他在23處並且對象在20處,則將他向上移動3個。
我認為,另一種解決方案遠非最有效,但最容易做到的是
function letsSee(e:Event):void {
while (myChar.hitTestObject(myLevel)==true) {
myChar.y-=1;
}
}
這將使他反復向上移動一個,直到他不再與該對象碰撞為止。
注意:我用hitTestObject方法發現的是,如果兩個盒子的邊緣在同一位置,則視為碰撞。 例:
框A為100x100,並且在x = 100,y = 100框B為100x100,並且在x = 200,y = 100 hitTestObject會將其視為碰撞,如果B在x = 201,則不會計數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.