重力的精灵不会随着重力移动

时间:2018-01-14 02:20:01

标签: python pygame

我在游戏中工作,我需要制造向右或向左移动的敌人(方向随机选择)并上下反弹。我已经设置它并且它主要起作用,但引力很奇怪。它不是顺畅地上下弹跳,而是突然变化。这是代码:

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的新手。

1 个答案:

答案 0 :(得分:2)

你的引力太低了。尝试更高的价值,例如0.08

if self.rect.y >= 275:
    self.speedy = -3.0
else:
    self.speedy += 0.08