我需要帮助,使屏幕跟踪球员的整个水平,以及处理碰撞在同一时间。我把这两件事都分开做了,它们工作得很好,但我在同时做这两件事时遇到了麻烦。在
这是我尝试过的。如果你需要更多的代码,我很乐意加入。在
我做错什么了?我已经试了三天了。在
class Sprite(pygame.sprite.Sprite):
def __init__(self,img):
pygame.sprite.Sprite.__init__(self)
self.image = pygame.image.load(img).convert_alpha()
self.rect = self.image.get_rect()
class Player(Sprite):
velocity_y = 0
onGround = True
def update(self):
self.rect.y += self.velocity_y
self.movePlayer()
self.checkBarriers()
self.checkCollision(0, self.velocity_y,terrain_list)
self.checkCollision(Terrain.velocity_x*-1,0,terrain_list)
def movePlayer(self):
if moving_up: # pressing the up arrow key
if self.onGround == True:
self.velocity_y = -SPEED
self.rect.y -= 1
self.onGround = False
if not moving_up: self.velocity_y = SPEED
def checkBarriers(self):
if self.rect.y >= LOWER_BOUNDARY-GROUND_HEIGHT-ROBOT_HEIGHT:
self.onGround = True
self.velocity_y = 0
self.rect.y = LOWER_BOUNDARY-GROUND_HEIGHT-ROBOT_HEIGHT
if self.rect.x <= LEFT_BOUNDARY:
Terrain.velocity_x = 0
def checkCollision(self,xvel,yvel,blocks):
for block in blocks:
if pygame.sprite.collide_rect(block,player):
if xvel < 0: # handle collisions for moving right. (Everything I've tried didnt work)
if xvel > 0: # handle collisions for moving left
if yvel > 0:
self.rect.y = block.rect.y-ROBOT_HEIGHT # player moving down
self.onGround = True
class Terrain(Sprite):
velocity_x = 0
terrain_x = 0
terrain_y = 0
terrain_vel_x = 0
terrain_vel_y = 0
def update(self):
self.rect.x += self.velocity_x
self.movePlayer()
def movePlayer(self):
if moving_right: self.velocity_x = -SPEED
elif not moving_right: self.velocity_x = 0
if moving_left: self.velocity_x = SPEED
请检查以下问题,因为他们可能会回答你的问题。在
Example1
Example 2
仅供参考,示例2是一个更好的例子,因为我相信它回答了您的问题,您是如何思考的。它回答了侧滚和几乎与你的角色相机的跟踪,然而例子1本身有一些非常有趣的东西。在
相关问题 更多 >
编程相关推荐