私は Pygame を学んでおり、ほとんどの人と同じように (私が思うに)、それを操作するために小さなゲームを書いています。そうは言っても、私の質問に自由に答えてください。
したがって、問題は私の「ボス」オブジェクトにあります。上からゲームにドロップし、360 度の円でランダムな数のショットを発射し始めるはずです。うまくいくこともありますが、予期していなかったことがいくつか起こっていることに気付きました。1) 弾丸は一定の速度で移動しているはずですが、時間の経過とともに速度が低下しているように見え、X 平面よりも Y 平面に沿って速く移動します。 1 つのショットが少し大きく見えることがよくあるので、いくつかはオーバーラップしていることを確認してください)、いくつかは右下に撃ち、もう 1 つは反対方向に撃ちます。それはすべきではありません。というわけで、これがコードです。射撃の計算を投稿してから、弾丸 (ファイアボール) のインスタンスを投稿します。残りは、私が見たものからかなり典型的です。
def shoot (self, shots, time_passed):
angle = (math.pi*2)/shots
for i in xrange(shots):
bullet = Fireball("fireball.png", self.direction, 100)
bullet.angle = angle
bullet.pos = ((math.sin(bullet.angle) * bullet.speed) * time_passed,
(math.cos(bullet.angle) * bullet.speed) * time_passed)
Fireball.container.remove(bullet)
EnemyFireball.container.add(bullet)
bullet.rect.center = self.rect.center
angle += angle
そして、これは弾丸です:
class Fireball (pygame.sprite.Sprite):
container = pygame.sprite.Group()
def __init__ (self, image, direction, speed):
pygame.sprite.Sprite.__init__ (self, self.container)
self.image = pygame.image.load(image).convert_alpha()
self.rect = self.image.get_rect()
self.radias = ((self.rect.width/2 + self.rect.height/2)/2)
self.speed = speed
self.direction = direction
self.angle = -1
def update (self, time_passed):
if self.angle != -1:
self.rect.move_ip(self.pos)
else:
self.rect.move_ip(0, (self.speed*time_passed) * self.direction)
if self.rect.bottom < 0: self.kill()
if self.rect.top > 2000: self.kill()
絵を描いてよろしいですか... 0 <-- ボスと弾丸の線。
私が期待するもの:
\|/
-0-
/|\
私が見ているもの:
\
0-
|\
…そして真っ直ぐ下の弾丸は常に大きく見えるので、重なっていると思いますが、理由はわかりません。Time_passed は、Clock.tick(60) の間で計算された時間であり、shots 引数は 8 ~ 16 の間の乱数です。
すべてが理にかなっていることを願っています。そうでない場合は、お知らせください。私は明確にしようとします。助けてくれてありがとう。
さらにコンテキストが必要な場合は、ソースへのリンクを次に示します。心配しないでください。http://code.google.com/p/scroller-practice/source/browse/