当前位置: 首页 > 知识库问答 >
问题:

[AS3]使用hitTestObject与墙壁碰撞

岳玉书
2023-03-14

所以我目前正在尝试做一个几乎像迷宫一样的游戏。问题是墙壁碰撞,一旦角色撞到墙上,我就不能再把他弄出来了,不管碰撞后我试图带他去哪个方向,他都会被“卡住”。我想的一个解决方案是,每当角色撞到墙上时,“支持他”,这样就不会再检测到碰撞。然而,当我这样做的时候,他以一种奇怪的方式穿墙。这是我的代码,所以你们可以知道我在做什么:

function keyPressed(event:KeyboardEvent):void
{

    if (event.keyCode == Keyboard.LEFT)
    {
       leftArrow = true;
       if(char.hitTestObject(test))
       {
           leftHit= true;
       } else { 
           leftHit = false;
       }
    }
    if (event.keyCode == Keyboard.RIGHT)
    {
       rightArrow = true;
       if(char.hitTestObject(test))
       {
           rightHit= true;
       } else { 
           rightHit = false;
       }
    }


}

function keyReleased(event:KeyboardEvent):void 
{

    if (event.keyCode == Keyboard.LEFT) 
    {
        leftArrow = false;
    }
    if (event.keyCode == Keyboard.RIGHT)
    {
       rightArrow = false;
    }

}

function walking(event:Event):void {
    if (rightArrow) {
        if(rightHit)
            char.x -= speed;
        else
            char.x += speed;    
    }

    if (leftArrow) {
        if(leftHit)
            char.x += speed;
        else
            char.x -= speed;
    }
}

这段代码的很大一部分实际上是从另一个问同样问题的人那里得到的。即使按照另一个主题中的建议去做,问题仍然存在。非常感谢您的帮助!

共有1个答案

禹智渊
2023-03-14

根据要求,以下是我的解决方案:

 if (rightArrow) {
                if (!test.hitTestPoint(MovieClip(root).char.x+speed, MovieClip(root).char.y, true))
                {
                    MovieClip(root).char.x += speed;    
                    x = x-speed; //moving the background
                }
            }

            if (leftArrow) {
                if (!test.hitTestPoint(MovieClip(root).char.x-speed, MovieClip(root).char.y, true))
                {
                    MovieClip(root).char.x -= speed;
                    x = x+speed; //moving the background
                }
            }
            if (upArrow) {
                if (!test.hitTestPoint(MovieClip(root).char.x, MovieClip(root).char.y-speed, true))
                {
                    MovieClip(root).char.y -= speed;    
                    y = y+speed; //moving the background
                }
            }

            if (downArrow) {
                if (!test.hitTestPoint(MovieClip(root).char.x, MovieClip(root).char.y+speed, true))
                {
                    MovieClip(root).char.y += speed;
                    y = y-speed; //moving the background
                }
            }

有一段时间了,有些东西我真的不记得了,但从我所看到的,我检查了增加我角色的速度是否会使它与墙发生碰撞。如果发生这种情况,即使我看起来有足够的空间,我也不会移动角色。我想差不多就是这样。

希望能有帮助。

 类似资料:
  • 我已经尝试解决了平滑的玩家-墙壁碰撞的问题,这样玩家可以沿着墙壁滑动。 我尝试了以下内容: 但是如果玩家碰到了墙,他不会滑动...他只是停下来了。(我对W,A,S,D也是分开做的。) 只有当我将玩家位置设置回他正在触摸的墙壁位置时,它才有效。如下: 但是它不起作用,因为对于与另一面墙相连的墙,玩家会接触更多的边,玩家会跳到角落...所以它只适用于一面墙... 我的问题是:如何以另一种方式使玩家与墙

  • 我知道已经有一些关于墙壁碰撞的问题了,但是这些答案中的技术都没有帮助我。我正在做一个没有重力的自上而下的探索游戏。运动很好,但是一旦我制造了墙壁和碰撞,它就开始出现故障并传送。我已经包含了(并大大减少了)我认为问题所在的两个功能,在底部我包含了整个代码。 根据pygame精灵墙碰撞的建议,我分割了x和y墙碰撞代码。墙壁碰撞代码基于https://github.com/marcusmoller/py

  • 我正在看Android的新ARCore库。它有检测水平表面的方法,但没有检测垂直表面或墙壁的方法。 我实际上试图使示例应用程序检测墙壁,但我有很多问题。 在ARCore中是否有一种本机或非本机检测垂直表面的方法?

  • 我想问题是我标记的地方。它在这里: 但我不知道为什么。我的理论是:球向上移动,击中了顶墙,踢进,使=真,那么和相应地改变(如果击中了顶墙,应该保持不变,而应该乘以-1)。然后它会向下移动,因此从顶墙上“弹”出来。 注意:目前我只工作的顶部墙壁。其他三个等我能想出怎么先从顶墙上弹开的时候再做。 你能帮我看看有什么问题吗?而如果这种操作需要使用vector2类,你能给我解释一下,或者给我一个学习的地方

  • 我有一个球,我可以在由大小相等的瓷砖组成的地图上移动。玩家应该不能在较暗且有黑色边框的瓷砖上行走。我有一个多维的瓷砖阵列,我用它来检查哪些瓷砖是实心的。 我希望玩家在水平和垂直移动时,可以靠墙滑动。问题是,如果他那样做,他就会固执己见。我设法使它在每个轴上都能完美工作,但是分开的。下面是我的水平碰撞检查代码: level.isBlocked() 方法检查数组的索引是否被实心磁贴占用。i 和 j 变

  • 我目前正在开发一个自上而下的射击游戏,在碰撞方面有一些问题。我的世界是瓷砖做的(64x64)。瓦片和实体是矩形。玩家以例如2.74的速度移动(为了更平滑的移动,不以像素为单位)。但是当涉及到玩家(一个实体)和墙之间的碰撞时,我有一些问题。为了检查是否有碰撞,我用我的球员的当前位置和他的移动速度来计算他的下一个位置和是否有碰撞。但我会检查途中的每个像素,所以即使移动速度非常快,我也无法跳过障碍。假设