0

画面上をスクロールするオブジェクトがいくつかあります。私の唯一の問題は、それらが同時に開始されることです。常に同じ X 座標にあるとは限らないように、異なる時間に開始するようにしたいと思います。どうすればいいですか?

import pygame, sys, time, random
from pygame.locals import *
pygame.init()
winW = 800
winH = 500
surface = pygame.display.set_mode ((winW, winH),0,32)

class Enemy():
    def __init__(self, char, xMoveAmnt, startY=0, startX=0):
        self.char = char
        self.x = startX
        self.y = startY
        self.startX=startX
        self.startY=startY
        self.xMoveAmnt = xMoveAmnt
        self.image = pygame.image.load(self.char)
        self.rect = self.image.get_rect()


    def moveChar(self):
        self.x += self.xMoveAmnt
        if self.x + self.rect.right >= 800:
            self.x=self.startX
            self.y=random.randint(0,300)


enemyList = []
for i in range (0, 3):
    xMoveAmnt=20
    enemyList.append(Enemy(("orc.png"), xMoveAmnt, random.randint(0, 500), 0))

while True:
    surface.fill ((255,255,255))
    for enemy in enemyList:
        enemy.moveChar()
        surface.blit(enemy.image, (enemy.x, enemy.y))
        time.sleep(00.01)        
    pygame.display.update()
4

1 に答える 1

1

コードへの影響が少ない変更は、オブジェクトが更新を開始するまでの遅延を指定する、イニシャライザに別のランダム パラメータを指定することです。

class Enemy():
    def __init__(self, char, xMoveAmnt, startY=0, startX=0, delay=0):
         ...
         self.delay = delay

    def moveChar(self):
        if self.delay > 0:
             self.delay -= 1
             return
        self.x += self.xMoveAmnt
        if self.x + self.rect.right >= 800:
            self.x=self.startX
            self.y=random.randint(0,300)

enemyList = []
for i in range (0, 3):
    xMoveAmnt=20
    enemyList.append(Enemy(("orc.png"), xMoveAmnt, random.randint(0, 500), 0, random.randint(0,100)))

関連のないヒント: 1) time.sleep を使用しないでください - タイミングには pygame.time.delay を使用してください 2) プロジェクトをより大きなものに発展させる前に、Pygame のスプライト クラスとスプライト グループについて学んでください。それらは、ゲーム内の複数のオブジェクトを制御するためのより高いレベルの利点を提供します

于 2013-06-19T01:04:27.153 に答える