【问题标题】:How can I get this hittest to work我怎样才能让这个热门测试工作
【发布时间】:2013-04-05 00:04:55
【问题描述】:

我正在创建一个游戏,你作为玩家拿着棒球棒,当你点击按钮时你挥动你的球棒。当你挥动你的球棒时,你击中了敌人,敌人会像高尔夫球一样朝你击中他们的相反方向飞去。我已经完成了移动和攻击功能的工作,但是我怎样才能注册命中测试,以便它在面对敌人时击中敌人并且敌人向后退。这是我到目前为止所做的:

package 
{
    import flash.display.MovieClip;
    import flash.events.Event;
    import flash.events.KeyboardEvent;
    import flash.events.MouseEvent;
    import flash.ui.Keyboard;

    public class Player extends MovieClip
    {
        var walkSpeed:Number = 4;
        var walkRight:Boolean = false;
        var walkLeft:Boolean = false;
        var walkUp:Boolean = false;
        var walkDown:Boolean = false;
        var attacking:Boolean = false;

        public function Player()
        {
            stage.addEventListener(KeyboardEvent.KEY_DOWN , walk);
            addEventListener(Event.ENTER_FRAME, Update);
            stage.addEventListener(KeyboardEvent.KEY_UP, stopWalk);
            stage.addEventListener(MouseEvent.CLICK, attack);
        }

        function walk(event:KeyboardEvent)
        {

            if (event.keyCode == 68)
            {
                walkRight = true;
            }
            if (event.keyCode == 87)
            {
                walkUp = true;
            }
            if (event.keyCode == 65)
            {
                walkLeft = true;
            }
            if (event.keyCode == 83)
            {
                walkDown = true;
            }
        }

        function Update(event:Event)
        {
            if (attacking == true)
            {
                walkRight = false;
                walkLeft = false;
                walkUp = false;
                walkDown = false;
            }
            else if (attacking == false)
            {
                var dx = parent.mouseX - x;
                var dy = parent.mouseY - y;
                var angle = Math.atan2(dy,dx) / Math.PI * 180;
                rotation = angle;

                if (walkRight == true)
                {
                    x +=  walkSpeed;
                    gotoAndStop('walk');
                }
                if (walkUp == true)
                {
                    y -=  walkSpeed;
                    gotoAndStop('walk');
                }
                if (walkLeft == true)
                {
                    x -=  walkSpeed;
                    gotoAndStop('walk');
                }
                if (walkDown == true)
                {
                    y +=  walkSpeed;
                    gotoAndStop('walk');
                }
            }


        }

        function stopWalk(event:KeyboardEvent)
        {
            if (attacking == false)
            {
                if (event.keyCode == 68)
                {
                    event.keyCode = 0;
                    walkRight = false;
                    gotoAndStop('stance');
                }
                if (event.keyCode == 87)
                {
                    event.keyCode = 0;
                    walkUp = false;
                    gotoAndStop('stance');
                }
                if (event.keyCode == 65)
                {
                    event.keyCode = 0;
                    walkLeft = false;
                    gotoAndStop('stance');
                }
                if (event.keyCode == 83)
                {
                    event.keyCode = 0;
                    walkDown = false;
                    gotoAndStop('stance');
                }
            }
        }

        function attack(event:MouseEvent)
        {
            if (attacking == false)
            {
                attacking = true;
                gotoAndStop('attack');
            }
        }
    }
}

【问题讨论】:

    标签: hittest


    【解决方案1】:

    当角色的方向改变时,根据他们现在面对的方式改变一个变量,例如; direction = 0 当他们朝下时,1 当他们朝右时,等等。然后用这个和敌人的位置来计算敌人是否被击中。为了让敌人飞回来,你会得到角色的方向来确定他们会飞回的方向。我会给出一些示例代码来帮助解释,但我在平板电脑上。

    【讨论】:

    • 感谢您的回复 我本来想这样做的,我应该看看僵尸是否足够接近以被蝙蝠击中(使用蝙蝠的长度作为圆半径),如果角色方向和僵尸线之间的角度在滑动范围内,然后他们击中。因此,如果与僵尸的角度与玩家面对的方向成 + 或 - 15 度,例如,它们处于滑动区域。我想看看有没有其他更简单的方法。
    • 到目前为止,我能够计算出半径,但我怎样才能得到正确的角度,以便它们在命中区域 public var angle:Number = 0;公共变量半径:数字= 95; var rad:Number = 角度 * (Math.PI / 180); MovieClip(root).Zombie.x = x + 半径 * Math.cos(rad); MovieClip(root).Zombie.y = y + radius * Math.sin(rad);
    • 我没有意识到你想让它如此精确。恐怕我帮不了你,因为我还不需要做那种计算。对不起。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-28
    • 1970-01-01
    • 2020-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多