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

检测精灵之间的碰撞

富辰阳
2023-03-14

我的游戏有两个职业,它们都产生精灵,唯一的区别是它们的精灵向不同的方向移动。

public void newSprite(float x,float y){
        Sprite sprite= Pools.obtain(Sprite.class);
        sprite.set(Mysprite);
        sprite.setPosition(x,y);
        arrayList.add(sprite);
    }

if(condition==true){
  newSprite(); //calls the method to spawn a new sprite
}

然而,我如何检测另一个类的精灵是否与这个类碰撞,两个类都产生了很多精灵。我的想法是也使用池为每个精灵创建一个矩形。

共有2个答案

祁雪峰
2023-03-14

您可以计算两个精灵之间的距离(从它们的中心开始)。如果它们之间的距离小于其半径的一半之和,则会发生碰撞。

师腾
2023-03-14

参数

此方法还接收两个子画面

假设

此方法假定两个精灵都包含属性< code>x 、< code>y 、< code>width和< code>height。

返回

此方法返回一个布尔值,表示它们是否碰撞。

bool detectCollision(Sprite sprite1, Sprite sprite2) {

    return ((sprite1.x <= sprite2.x && (sprite2.x + sprite2.width) - sprite1-x <= sprite1.width + sprite2.width) ||
            (sprite1.x >= sprite2.x && (sprite1.x + sprite1.width) - sprite2.x <= sprite1.width + sprite2.width)) && // Check for x 
        ((sprite1.y <= sprite2.y && (sprite2.y + sprite2.height) - sprite1.y <= sprite1.height + sprite2.height) || 
            (sprite1.y >= sprite2.y (sprite1.y + sprite1.height) - sprite2.y <= sprite1.height + sprite2.height)); // Check for y

}

此方法检查每个矩形的最外侧,并检测距离是否小于组合的两个矩形的宽度或高度。如果两个轴都检查为真,则可以保证它们是接触的。

告诉我它是否有效!

 类似资料:
  • 使用< code >加速计,我的精灵图像会左右移动,如果我触摸屏幕,精灵会移动到Y轴。我想在不同的精灵之间进行碰撞检测,这样如果精灵穿过一个物体,它就会停下来藏在那个物体里。我已经看了这个https://www.youtube.com/watch?v=T1aN-vTqLc的教程,但什么也没发生。进行碰撞检测的正确方法是什么?我不知道我的编码有什么问题。任何建议或更好的教程谢谢和进步 这是我的编码

  • 在开始学习相关知识点之前,我们有必要先学习精灵和碰撞检测的含义。 精灵(英文译为 Sprite),其实在一个游戏程序中,精灵本质指的是一张张小尺寸的图片,比如游戏中的各种道具、人物、场景装饰等,它们都可以看做成一张张小的“精灵”图。除此之外,人物的移动也可以看做是一系列小精灵图构成的序列(按帧组成的序列),如下图所示: 图1:动作逐帧分解图 如果将逐帧分解后的动作,按照一定的频率播放,那么就形成了

  • 我正在使用SpriteKit在XCode中制作一个游戏。游戏中有一个玩家,他必须避免不同类型的投射物。当玩家与投射物相撞时,分数发生变化,投射物消失。然而,当两个弹丸碰撞时,它们会反弹。我想让两个炮弹每次相撞时,它们表现得像什么都没发生过一样,并保持原来的轨迹。我该怎么办? *注意:这并不是整个代码,重要的是它。

  • 我正在使用Sprite Kit中的碰撞检测。它在起作用,防止我的精灵穿越路径。然而,我在didBeginContact中没有收到通知:而且我似乎无法控制物理引擎在发生碰撞时的响应。 我让各种汽车(SKSpriteNodes)使用SKAction followPath沿着以下路径行驶:as offset:oriento path:duration: 以前,如果两辆车相交,它们都会像往常一样继续行驶,

  • 我一直在学习一些pygame教程,并且基于这些教程开发了自己的代码。具体如下: 所以我想出了如何让我的家伙跳跃,但是我已经在天空中放置了一个块并试图这样做: 试图让角色停止跳跃。有没有一个内置的函数来测试这一点,或者有没有一个适合我的方法。顺便说一下,这是行不通的,我似乎也不知道该怎么做。非常感谢任何帮助:)

  • 当我尝试检测两个矩形之间的碰撞时当我启动程序时,它只打印“HIT”一次 我还尝试使用但出现此错误: 回溯(最近调用最后): 文件“D:/蟒蛇/PyCharm/test/src/Main/test.py”,第 104 行, 命中 = pygame.sprite.spritecollide(player_sprites,enemy_sprites,1) 文件“D:\程序\蟒蛇\lib\site-pac