【发布时间】:2015-05-26 18:59:43
【问题描述】:
我正在使用 pygame 2.7.9 制作关卡编辑器平台游戏。代码存在一些问题。首先,当我在墙上时,我无法跳跃。其次,我的角色在墙上时动作不流畅。 playWallList 是关卡中所有墙壁的列表。
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()
【问题讨论】:
-
能贴出完整的代码吗?
-
我想通了,我发布了我的解决方案
标签: python pygame collision platform