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

皮游戏精灵碰撞只给出真

印宏阔
2023-03-14

我希望代码能够检测岩石和玩家之间的碰撞。但不知何故,程序会一直检测到碰撞。我尝试调试它,并尝试寻找此问题的解决方案,但没有成功。这只是我或这是非常常见的。

也许是矩形大小?当我尝试尽我所能时,问题仍在继续。自己尝试代码。帮帮我!

请回答!

代码:

from random import *
import time
import pygame
from pygame.locals import *
import sys
pygame.init()

class character(pygame.sprite.Sprite):
    def __init__(self, x, y, image):
        self.x = x
        self.y = y
        self.image = image
        self.rect = self.image.get_rect();

    def checkCollision(sprite1, sprite2):
        if pygame.sprite.collide_rect(sprite1, sprite2):
            print(pygame.sprite.collide_rect(sprite1, sprite2))

pressed_left = False
pressed_right = False
pressed_up = False
pressed_down = False
x_speed = 1
y_speed = 1
clock = pygame.time.Clock()

screen = pygame.display.set_mode((640, 480))

playerskin = pygame.image.load('Player1_Skin.png').convert_alpha()
rockskin = pygame.image.load('Player2_Skin.png').convert_alpha()

player = character(20, 20, playerskin)
rock = character(400, 400, rockskin)

while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT: 
            sys.exit()        
        elif event.type == pygame.KEYDOWN:
            if event.key == pygame.K_LEFT:
                pressed_left = True
            elif event.key == pygame.K_RIGHT:
                pressed_right = True
            elif event.key == pygame.K_UP:
                pressed_up = True
            elif event.key == pygame.K_DOWN:
                pressed_down = True
        elif event.type == pygame.KEYUP:
            if event.key == pygame.K_LEFT:
                pressed_left = False
            elif event.key == pygame.K_RIGHT:
                pressed_right = False
            elif event.key == pygame.K_UP:
                pressed_up = False
            elif event.key == pygame.K_DOWN:
                pressed_down = False

    if pressed_left:
        player.x -= x_speed
    if pressed_right:
        player.x += x_speed
    if pressed_up:
        player.y -= y_speed
    if pressed_down:
        player.y += y_speed

    screen.fill((0, 255, 0))

    screen.blit(player.image, (player.x, player.y))
    screen.blit(rock.image, (rock.x, rock.y))

    print(bool(pygame.sprite.collide_rect(rock, player)))
    #rock.checkCollision(player)

    pygame.display.update()
    clock.tick(60)

共有1个答案

丌官博文
2023-03-14

你的矩形并没有移动,因为它们是基于图像的,当你把它们blit到屏幕上时,图像是偏移的。

您需要在初始化时复制图像rect(您已经在这样做了),然后使用rect.move来表示每个实体位置的边界框。

 类似资料:
  • 在get_hit=pyGame.sprite的第82行,我检查sprite碰撞的移动时,它会给出错误提示:“:File”c:\Users\pc\VS_PYTHON_PY\pyGame.PY“。”。spritecollide(Player,敌方,True)文件“C:\python py\lib\site packages\pygame\sprite.py”,第1682行,位于spritecrolli

  • 这就是正在发生的事情,游戏不断停止,因为两个圆圈相互碰撞,我正在尝试通过确保ID是正方形ID来防止这种情况,我试图让圆圈碰撞在一起,而忽略碰撞,但它没有这样做,我不知道如何确切地阻止它相互碰撞,只允许它与正方形碰撞。 基本上我想阻止这个圆与另一个圆碰撞,并允许它与正方形碰撞。 任何帮助都会很好谢谢 游戏引擎引擎类 这是我在扩展game.engine.engine包的game类中检查冲突的地方。 游

  • 我在PyGame中创建了两个简单的精灵,其中一个是雨伞,另一个是雨滴。雨滴被添加到一个名为< code>all_sprites的sprite组中。伞精灵有自己的组,名为< code>Umbrella_sprite 雨滴从屏幕顶部“落下”,如果其中一个碰到雨伞/与雨伞碰撞..雨滴应该被删除了。但是除了特定雨滴之外,所有其他雨滴都受此影响。

  • 我正在制作一个游戏,在这个游戏中,你可以用精灵跳跃,障碍物正在向你移动。我制作了一个精灵面具,并试图使用精灵碰撞功能,但什么也没发生:为了检查是否发生碰撞,我做了一个简单的打印语句。我试着将玩家精灵与自己碰撞,碰撞成功了。所以我在困惑什么是缺失或错误。 背景图片 玩家图片 障碍物图片

  • 我已经寻找并找到了单个碰撞的答案,但我正在寻找一种检测多种类型的碰撞的方法。我正在制作一个游戏,其中有3个我想要的碰撞。用户飞机与敌方子弹相撞,用户子弹与敌机相撞(我已经工作过),敌方子弹与用户子弹相撞。我已经设置并更正了所有类别BitMask和contactTestBitMask。这是我的委托方法。

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