3

画面上でボックスを動かすだけの簡単な pygame プログラムを書いています。箱はとても速く動くので、速度を制御する方法を知りたいです。私のコードでは、更新された位置は 1 だけ移動されますが、数値が整数でない場合はより複雑になるため、小さくはなりません。

import os, sys
import pygame
from pygame.locals import *

pygame.init()
mainClock = pygame.time.Clock()

WINDOWWIDTH = 400
WINDOWHEIGHT = 400
windowSurface = pygame.display.set_mode((WINDOWWIDTH, WINDOWHEIGHT), 0, 32)
pygame.display.set_caption("Box")

BLACK = (0, 0, 0)
RED = (255, 0, 0)
WHITE = (255, 255, 255)
size1 = 20
size2 = 2
#character = pygame.Rect(30, 30, 20, 30)
player = pygame.Surface((40,40))




pos1 = 100
pos2 = 100


MOVESPEED = 6

x = 1

while True:
    if pos1 == WINDOWWIDTH - 40 and pos1 > 0:
        pos1 -= 1
        x += 1
    elif pos1 < WINDOWWIDTH - 40 and x == 1:
        pos1 += 1
    elif x ==2:
        pos1 -= 1


    for event in pygame.event.get():
        if event.type == QUIT:
            pygame.quit()
            sys.exit()
        if event.type == KEYDOWN:
            if event.key == K_LEFT:

                pos1 -= 5
            if event.key == K_RIGHT:
                pos1 += 4


    windowSurface.fill(WHITE)

    #screen.blit(character)



    windowSurface.blit(player, (pos1, pos2))
    pygame.display.update()
4

5 に答える 5

8

次のコードを「whileTrue:」ループのどこかに配置する必要があります。

clock.tick([insert fps here])

そしてこれをループの前のどこかに置きます:

clock=pygame.time.Clock()

これにより、1秒間に入力した回数を超えてループを実行することはできなくなり、キューブの速度が低下することが期待されます。

于 2012-09-01T20:08:17.997 に答える
2

ループのすべての反復で位置を変更しないでください。

それ以外の

while True:
  if ... :
    pos1 += 1
  ...

次のようなsomethinigを使用します。

tmp = 0

while True:
  if ... :
    tmp += 1
    if tmp == 10:
      pos1 += 1
      tmp = 0
  ... 

また

tmp = 0

while True:
  if ... and not tmp % 10:
      pos1 += 1
  ... 

10自分に合った値に調整します。

また、 Clockを使用して(多かれ少なかれ)一定のフレームレートを取得するように、プログラムのフレームレートを制限することもできます。

于 2012-06-08T06:25:08.830 に答える
2

結局、浮動小数点数を使用して位置を格納できます。while ループの更新値を小さい値に変更しますpos1 += 0.25。次に、必ず整数を blit してください: windowSurface.blit(player, (int(pos1), int(pos2))).

于 2012-06-08T08:26:53.730 に答える
0

私は通常、ほとんどの位置に整数を使用しますが、オブジェクト/スプライト/...を画面に描画するためにpygameと言うとき、オブジェクトが画面上で1ステップ移動するため、常に位置を10で割って10ステップの値を持ちます.

これを整理するのはそれほど難しいことではありません。

于 2013-03-21T18:57:38.813 に答える