我正在用pygame2.7.9制作一个关卡编辑平台游戏。代码有一些问题。首先,当我站在墙上时,我不能跳。第二,我的角色在墙上时动作不流畅。播放墙列表是标高中所有墙的列表。在
import pygame, random, sys
from pygame.locals import *
running = True #Flags game as on
class PlayPlayer(pygame.sprite.Sprite):
def __init__(self):
pygame.sprite.Sprite.__init__(self)
self.image = images["spr_player"]
self.rect = self.image.get_rect()
self.rect.topleft = placedPlayer.rect.topleft
self.speedX, self.speedY = 0, 0
def update(self):
global playWallList
self.rect.y += self.speedY
self.rect.x += self.speedX
self.calc_grav()
wall_hit_list = pygame.sprite.spritecollide(self, playWallList, False)
for wall in wall_hit_list:
if(self.speedX > 0): #player moves right and collides into wall
self.rect.left = wall.rect.right
elif(self.speedX < 0): #player moves left and collides into wall
self.rect.right = wall.rect.left
# Check and see if we hit anything
wall_hit_list = pygame.sprite.spritecollide(self, playWallList, False)
for wall in wall_hit_list:
# Reset our position based on the top/bottom of the object.
if self.speedY > 0:
self.rect.bottom = wall.rect.top
elif self.speedY < 0:
self.rect.top = wall.rect.bottom
# Stop our vertical movement
self.speedY = 0
def go_left(self):
self.speedX = -3
def go_right(self):
self.speedX = 3
def stop(self):
self.speedX = 0
def calc_grav(self):
if self.speedY == 0:
self.speedY = 1
else:
self.speedY += .25
def jump(self):
global playWallList
self.speedY += 2
platform_hit_list = pygame.sprite.spritecollide(self, playWallList, False)
self.speedY -= 2
# Checks to make sure if it is ok to jump
if len(platform_hit_list) > 0 or self.rect.bottom >= screenHeight:
self.speedY = -10
while running:
for event in pygame.event.get():
if event.type == pygame.KEYUP:
if event.key == pygame.K_LEFT and player[0].speedX < 0:
player[0].stop()
if event.key == pygame.K_RIGHT and player[0].speedX > 0:
player[0].stop()
keys_pressed = pygame.key.get_pressed()
if keys_pressed[K_LEFT]:
player[0].go_left()
if keys_pressed[K_RIGHT]:
player[0].go_right()
if keys_pressed[K_UP]:
player[0].jump()
我能解决的第一个问题却忘了怎么解决。第二个问题我解决了自校正.y+=自我。迅速而不是在碰撞前检查u。以下是更新后的代码(适用于跳跃和墙壁碰撞):
相关问题 更多 >
编程相关推荐