簡體   English   中英

AS3-hitTestObject對象懸停嗎?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM