バウンド処理1
キャラクターをウィンドウの中でバウンド処理をさせます.
import pygame from pygame.locals import * import sys SCR_WIDTH,SCR_HEIGHT = (1000,700) pygame.init() screen = pygame.display.set_mode((SCR_WIDTH,SCR_HEIGHT)) pygame.display.set_caption("画像の移動と跳ね返り処理") backImg = pygame.image.load("hakusuiko.jpg").convert() pythonImg2 = pygame.image.load("kappa3.png").convert() colorkey = pythonImg2.get_at((0,0)) # 左上の色を透明色に pythonImg2.set_colorkey(colorkey, RLEACCEL) pythonImg2_rect = pythonImg2.get_rect() vx =vy =2# 1フレームの移動ピクセル clock = pygame.time.Clock() while True: screen.blit(backImg, (0,0)) clock.tick(60) # 60fps # 画像の移動 pythonImg2_rect.move_ip(vx, vy) # 跳ね返り処理 if pythonImg2_rect.left < 0 or pythonImg2_rect.right > SCR_WIDTH: vx = -vx if pythonImg2_rect.top < 0 or pythonImg2_rect.bottom > SCR_HEIGHT: vy = -vy screen.blit(pythonImg2,pythonImg2_rect) pygame.display.update() for event in pygame.event.get(): if event.type == QUIT: sys.exit() if event.type == KEYDOWN and event.key == K_ESCAPE: sys.exit()
ウィンドウの大きさの設定が今までとは異なります.
左上を(0,0)とし右下までの大きさを設定します.
バウンド処理をさせる際に, 高さと幅の境界値によって判定させるためです.
境界値に達したらキャラクターの進むベクトルが変わる処理をしてあげます.
キャラクターが動いているように見えるためには, アニメのように少しずつ絵をずらして何枚も順に画面に表示させます.
この要領でプログラムも作成します.
vx = vy=2 # 1フレームの移動ピクセル clock = pygame.time.Clock() while True: screen.blit(backImg, (0,0)) clock.tick(60) # 60fps # 画像の移動 pythonImg2_rect.move_ip(vx, vy)
画像の位置を少しだけ(vx,vy)ずらして, while文で繰り返します.
次に一秒間の画像の更新回数であるFPSの説明です.
pygameではFPSの設定が非常に簡単です.
pygame.time.Clockのtick()関数で設定できます.
今回は一秒間に60回繰り返します.
次に画像のバウンド処理について具体的に見ていきます.
先ほど, 移動ピクセルの設定をしました. この値を正の値にすれば右に進み, 負の値にすれば左に進みます.
x座標の動きでは, キャラクターの画像の左端が0より小さくなった場合もしくは画像の右端がSCR_WIDTHより大きくなったら画像が進むベクトルを逆にするようにします.
y座標も同様です.