我正在pygame的平臺遊戲中學習引擎。pygame平臺碰撞
我讓它創建塊的多個實例,並且我有一個可以以越來越快的速度下降的播放器對象。我怎麼能做到這一點,以便當玩家擊中該區塊時,它不會經過?這裏是我的代碼:
#imports
import pygame, sys
from pygame.locals import *
#init game
pygame.init()
screen = pygame.display.set_mode((640,480))
pygame.key.set_repeat(True)
clock = pygame.time.Clock()
#classes
class playerClass:
x = 100
y = 100
boundingBox_x = 32
boundingBox_y = 32
sprite = pygame.image.load("Image2.png").convert_alpha()
class Block(object):
sprite = None
def __init__(self, x, y):
if not Block.sprite:
Block.sprite = pygame.image.load("Image1.png").convert_alpha()
self.rect = Block.sprite.get_rect(top=y, left=x)
#objects
playerObject = playerClass()
blocks = []
blocks.append(Block(0, 14*32))
blocks.append(Block(1*32, 14*32))
blocks.append(Block(2*32, 14*32))
blocks.append(Block(3*32, 14*32))
blocks.append(Block(4*32, 14*32))
blocks.append(Block(5*32, 14*32))
blocks.append(Block(6*32, 14*32))
blocks.append(Block(7*32, 14*32))
blocks.append(Block(8*32, 14*32))
blocks.append(Block(9*32, 14*32))
blocks.append(Block(10*32, 14*32))
blocks.append(Block(11*32, 14*32))
blocks.append(Block(12*32, 14*32))
blocks.append(Block(13*32, 14*32))
blocks.append(Block(14*32, 14*32))
blocks.append(Block(15*32, 14*32))
blocks.append(Block(16*32, 14*32))
blocks.append(Block(17*32, 14*32))
blocks.append(Block(18*32, 14*32))
blocks.append(Block(19*32, 14*32))
blocks.append(Block(0, 13*32))
blocks.append(Block(19*32, 13*32))
blocks.append(Block(0, 13*32))
blocks.append(Block(19*32, 13*32))
blocks.append(Block(0, 12*32))
blocks.append(Block(19*32, 12*32))
blocks.append(Block(0, 11*32))
blocks.append(Block(19*32, 11*32))
#colors
white = 255,255,255
#variables
up = False
down = False
right = False
left = False
xspeed = 0
yspeed = 0
gspeed = 0.2
#functions
#main loop
quitting = False
while quitting == False:
for event in pygame.event.get():
#event processing
if event.type == pygame.QUIT:
quitting = True
#game logic
yspeed += gspeed
playerObject.y += yspeed
#drawing
screen.fill((white))
screen.blit(playerObject.sprite,(playerObject.x,playerObject.y))
for block in blocks:
screen.blit(block.sprite, block.rect)
pygame.display.flip()
#ending
clock.tick(60)
另外,我知道我使用了很多代碼來構建關卡。我正在從系統讀取txt文件的級別。謝謝
如果您使用['pygame.sprite'](http://www.pygame.org/docs/ref/sprite.html)模塊,它可以爲您完成大部分的工作。如果你只是使用圖像,並嘗試自己做這一切,還有更多的工作要做。你想要哪個答案? – abarnert
作爲一個方面說明,它看起來像你的代碼有一個不同的嚴重問題:幾乎所有東西都使用類屬性而不是實例屬性。這意味着該類的所有實例將共享相同的值。除了常量或全局行爲標誌之外,您通常不想使用類屬性。 – abarnert
@abarnert:好的。我將如何去解決這個問題? – lando111