前回は「画面の作成」と「画像の表示」をやりましたが(pygameの使い方まとめ|pythonでゲームプログラミング)というのをしました。
今回は、どっとキャラを作成して動かしてみるということをしたいと思います。
といっても、RPGツクールとは違うので、どんな画像を使えばいいかがわかりません。
まずは、キーボードを使って動かすというところをやっていきたいと思います。
画面と画像の配置
# -*- coding:utf-8 -*- #使用している文字コード
import pygame
from pygame.locals import *
import sys
pygame.init()
screen=pygame.display.set_mode((800,800)) #画面の大きさ
pygame.display.set_caption("画像を配置") #タイトルを設定
player=pygame.image.load("a0001_013635.jpg").convert_alpha()#playerの設定
rect_player=player.get_rect()
rect_player.center=(400,400)
while(1):
pygame.display.update() #画面の更新
pygame.time.wait(30) #更新間隔
screen.blit(player,rect_player)
for event in pygame.event.get():
if event.type==QUIT:
pygame.puit()
sys.exit(0)
ここまでが、前回やったところです。
次は画像を左右に動かしてみます。
# -*- coding:utf-8 -*- #使用している文字コード
import pygame
from pygame.locals import *
import sys
(w,h)=(800,800) #スクリーンの大きさ
(x,y)=(w/2,h/2) #スクリーンの中心
pygame.init()
pygame.display.set_mode((w,h)) #画面の大きさ
screen=pygame.display.get_surface()
pygame.display.set_caption("画像を配置") #タイトルを設定
player=pygame.image.load("a0001_013635.jpg").convert_alpha()#playerの設定
rect_player=player.get_rect()
rect_player.center=(x,y)
while(1):
pygame.display.update() #画面の更新
pygame.time.wait(30) #更新間隔
screen.fill((0,20,0,0)) #画面の背景色
screen.blit(player,rect_player)
for event in pygame.event.get():
if event.type==QUIT: #終了イベント
pygame.quit()
sys.exit(0)
if event.type==KEYDOWN: #キーイベント設定
if event.key==K_LEFT: #もし左キーを押したら
rect_player.move_ip(-1,0) #x方向にマイナス1
if event.key==K_RIGHT:
rect_player.move_ip(1,0)
if event.key==K_UP:
rect_player.move_ip(0,-1)
if event.key==K_DOWN:
rect_player.move_ip(0,1)
こんな感じになりました。
ここで大切なのは
if event.type==KEYDOWN: #キーイベント設定
if event.key==K_LEFT: #もし左キーを押したら
rect_player.move_ip(-1,0) #x方向にマイナス1
if event.key==K_RIGHT:
rect_player.move_ip(1,0)
if event.key==K_UP:
rect_player.move_ip(0,-1)
if event.key==K_DOWN:
rect_player.move_ip(0,1)
これです。
もし、キーを押したら、画像をx軸、y軸に対してプラスしたりマイナスしたりします。
もう一つ大切なのは、
screen.fill((0,20,0,0)) #画面の背景色
これです。
背景色の色は何でもいいのですが、どんな色でもいいので設定してください。
そうしないと、移動させる前の情報がまるみえになってしまいます。
移動を長押しでもできるようにする
うえのプログラムだといちいち押しなおさなければ移動できませんでしたので、これを変更していきます。
# -*- coding:utf-8 -*- #使用している文字コード
import pygame
from pygame.locals import *
import sys
(w,h)=(800,800) #スクリーンの大きさ
(x,y)=(w/2,h/2) #スクリーンの中心
pygame.init()
pygame.display.set_mode((w,h)) #画面の大きさ
screen=pygame.display.get_surface()
pygame.display.set_caption("画像を配置") #タイトルを設定
player=pygame.image.load("a0001_013635.jpg").convert_alpha()#playerの設定
rect_player=player.get_rect()
rect_player.center=(x,y)
while(1):
pressed_key=pygame.key.get_pressed() #すべてのキーの入力を取得
if pressed_key[K_LEFT]: #もし左キーを押したら
rect_player.move_ip(-1,0) #x方向にマイナス1
if pressed_key[K_RIGHT]:
rect_player.move_ip(1,0)
if pressed_key[K_UP]:
rect_player.move_ip(0,-1)
if pressed_key[K_DOWN]:
rect_player.move_ip(0,1)
pygame.display.update() #画面の更新
pygame.time.wait(30) #更新間隔
screen.fill((0,20,0,0)) #画面の背景色
screen.blit(player,rect_player)
for event in pygame.event.get():
if event.type==QUIT: #終了イベント
pygame.quit()
sys.exit(0)
ここで変更したのが
if event.type==KEYDOWN: #キーイベント設定
if event.key==K_LEFT: #もし左キーを押したら
rect_player.move_ip(-1,0) #x方向にマイナス1
if event.key==K_RIGHT:
rect_player.move_ip(1,0)
if event.key==K_UP:
rect_player.move_ip(0,-1)
if event.key==K_DOWN:
rect_player.move_ip(0,1)
↓
pressed_key=pygame.key.get_pressed() #すべてのキーの入力を取得
if pressed_key[K_LEFT]: #もし左キーを押したら
rect_player.move_ip(-1,0) #x方向にマイナス1
if pressed_key[K_RIGHT]:
rect_player.move_ip(1,0)
if pressed_key[K_UP]:
rect_player.move_ip(0,-1)
if pressed_key[K_DOWN]:
rect_player.move_ip(0,1)
という感じです。
まず、場所をwhile(1)の下に置きます。
そしたら、このようにプログラムを変えます。
これで、連続して動かすことができます。
まとめ
やっと画像を動かす事ができました。
しかし、私の場合自分顔の写真を使っているので、まだゲームと呼ぶにはあまりにもシュールです。
ということで、動かすキャラクターの画像を手に入れなければなりません。
それに加え、右に動くときは右を向く、左に動かすときは左に向くというような事をするために、キーごとに画像を変更する必要があります。
次回はここら辺をやっていきたいと思います。