我在游戏中工作,我需要制造向右或向左移动的敌人(方向随机选择)并上下反弹。我已经设置它并且它主要起作用,但引力很奇怪。它不是顺畅地上下弹跳,而是突然变化。这是代码:
class Mob(pygame.sprite.Sprite):
def __init__(self):
pygame.sprite.Sprite.__init__(self)
self.image=pygame.Surface((30,40))
self.image.fill(RED)
self.rect = self.image.get_rect()
self.direct = random.randrange(2)
if self.direct == 0:
self.rect.x = -20.0
else:
self.rect.x = 500.0
self.rect.y = 180.0
self.speedy = 0.0
def update(self):
if self.rect.y >= 275:
self.speedy = -3.0
else:
self.speedy += 0.02
if self.direct == 0:
self.rect.x += 1.0
if self.rect.x > width + 20:
self.rect.x = -20
else:
self.rect.x -= 1.0
if self.rect.x > width - 500:
self.rect.x = 500
self.rect.y = self.rect.y + self.speedy
all_sprites = pygame.sprite.Group()
mobs = pygame.sprite.Group()
for i in range(2):
m = Mob()
all_sprites.add(m)
mobs.add(m)
吸引敌人的代码是:
all_sprites.update()
all_sprites.draw(screen)
pygame.display.flip()
敌人目前只是一个红色的矩形,但我要用别的东西替换它。如果你不自己尝试,很难准确解释问题是什么。你可以试试这个:
import pygame
import math
import random
from pygame.locals import *
RED = (255,0,0)
FPS = 120
class Mob(pygame.sprite.Sprite):
def __init__(self):
pygame.sprite.Sprite.__init__(self)
self.image=pygame.Surface((30,40))
self.image.fill(RED)
self.rect = self.image.get_rect()
self.direct = random.randrange(2)
if self.direct == 0:
self.rect.x = -20.0
else:
self.rect.x = 500.0
self.rect.y = 180.0
self.speedy = 0.0
def update(self):
if self.rect.y >= 275:
self.speedy = -3.0
else:
self.speedy += 0.02
if self.direct == 0:
self.rect.x += 1.0
if self.rect.x > width + 20:
self.rect.x = -20
else:
self.rect.x -= 1.0
if self.rect.x > width - 500:
self.rect.x = 500
self.rect.y = self.rect.y + self.speedy
all_sprites = pygame.sprite.Group()
mobs = pygame.sprite.Group()
for i in range(2):
m = Mob()
all_sprites.add(m)
mobs.add(m)
while True:
clock.tick(FPS)
all_sprites.update()
all_sprites.draw(screen)
pygame.display.flip()
如果那段代码不起作用,那么抱歉,我仍然是python和pygame的新手。
答案 0 :(得分:2)
你的引力太低了。尝试更高的价值,例如0.08
。
if self.rect.y >= 275:
self.speedy = -3.0
else:
self.speedy += 0.08