pygame学习(2) 位置移动
我们把所有的精灵单独写在一个sprites.py的文件中,在这个测试的项目中是一个Player类:
class Player(pg.sprite.Sprite):
def __init__(self):
pg.sprite.Sprite.__init__(self)
self.image = pg.Surface((30,40))
self.image.fill(GREEN)
self.rect = self.image.get_rect()
self.rect.center = (WIDTH/2 , HEIGHT/2)
self.pos = vec(WIDTH/2,HEIGHT/2)
self.vel = vec(0,0)
self.acc = vec(0,0)
def update(self):
self.acc = vec(0,0)
keys = pg.key.get_pressed()
if keys[pg.K_LEFT]:
self.acc.x = -PLAYER_ACC
if keys[pg.K_RIGHT]:
self.acc.x = PLAYER_ACC
self.acc += self.vel * PLAYER_FRICTION
self.vel += self.acc
self.pos += self.vel + 0.5*self.acc +0.1*vec(self.vel.x**3,self.vel.y**3)
self.rect.center = self.pos
这里面我们使用了一个math中的vector来定义坐标内容,所以前面要声明一下:
vec = pg.math.Vector2
我们希望能够让这个精灵类移动起来,pos中是我们玩家的真实坐标,vel则是速度,acc为加速度,这样一来我们就可以模拟出真实的物理移动。
可以看到:
self.acc += self.vel * PLAYER_FRICTION
加速度每次都要加上当前速度乘以一个阻力系数(负数-0.2),这里就可以实现当玩家松开移动的时候,玩家会逐渐减速然后停下来。这些系数、加速度一类的写死的数值都要放在我们的setting文件中统一管理。
键盘按钮触发是写在update中的,通过pygame.key.get_pressed()来获取到玩家按的什么键位。

浙公网安备 33010602011771号