ゲームを作るうえで「キャラクターがジャンプする」「重力に従って落ちる」という要素は、多くのプラットフォームゲームで重要な機能です。Pygameは、Pythonで手軽に2Dゲームを作成できるライブラリであり、重力やジャンプのようなアクションを自分でコーディングして実装できます。
この記事では、Pygameでキャラクターに重力を適用し、ジャンプをさせる方法をステップごとに説明します。
Pygameのインストールと基本操作
Pygameのインストールについてはこちらから!
Pygameの基本的なコードについて分からなかったら以下の記事に戻ってみてね!
重力とジャンプの実装
サンプルコード
import pygame
import sys
# Pygameの初期化
pygame.init()
# 画面サイズ
SCREEN_WIDTH, SCREEN_HEIGHT = 800, 600
screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))
pygame.display.set_caption("Pygameでキャラクターを動かす")
# キャラクターの読み込みとサイズ調整
character_image = pygame.image.load("img.png")
character_image = pygame.transform.scale(character_image, (100, 100)) # 適切なサイズに変更
# 重力とジャンプの設定
gravity = 0.5
jump_strength = -10 # ジャンプの高さ or 強さ
ground_level = SCREEN_HEIGHT - 100 # 地面の高さ
# キャラクターの初期位置
player_pos = [SCREEN_WIDTH // 2, ground_level]
player_vel_y = 0 # Y軸方向の速度
is_jumping = False # ジャンプしているかどうかのフラグ
# 色の設定
background_color = (255, 255, 255) # 白色
clock = pygame.time.Clock()
# ゲームループ
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_SPACE and not is_jumping:
player_vel_y = jump_strength
is_jumping = True
# 重力の適用
player_vel_y += gravity
player_pos[1] += player_vel_y
# 地面での衝突判定
if player_pos[1] >= ground_level:
player_pos[1] = ground_level
player_vel_y = 0
is_jumping = False
# 背景色の設定とキャラクターの描画
screen.fill(background_color)
screen.blit(character_image, (player_pos[0], player_pos[1]))
pygame.display.flip()
clock.tick(60)
これでスペースキーを押せば、ジャンプできるようになったよ!
この後詳しく解説していくよ!
サンプルコードの解説
重力の概念
「重力」の概念を取り入れます。重力は常に下方向に引っ張る力として、キャラクターの位置に影響を与える力です。Pygameでは、重力を「Y軸方向の速度」に変化を与えることでシミュレーションできます。
例えば、gravityという変数に一定の値を設定し、Y軸の速度に加えることで重力の影響を与えます。
また、ジャンプの力をコントロールするために、適切なjump_strengthの値を設定します。また、ジャンプ中であることを判定するis_jumpingフラグも活用します。
# 重力とジャンプの設定
gravity = 0.5
jump_strength = -10 # ジャンプの高さ or 強さ
ground_level = SCREEN_HEIGHT - 100 # 地面の高さ
# キャラクターの初期位置
player_pos = [SCREEN_WIDTH // 2, ground_level]
player_vel_y = 0 # Y軸方向の速度
is_jumping = False # ジャンプしているかどうかのフラグ
ジャンプの実装
~中略~
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_SPACE and not is_jumping:
player_vel_y = jump_strength
is_jumping = True
ジャンプを実装するには、ユーザーがジャンプキー(通常はスペースキー)を押したときにキャラクターのY軸速度をマイナスの値(今回で言う jump_strength)にする必要があります。このようにすることで、キャラクターは一時的に上方向に移動します。
そして、is_jumpingの状態を判定し、ジャンプ中(is_jumingがTrue)の時はスペースキーの押下に反応しない様にします。
# 重力の適用
player_vel_y += gravity
player_pos[1] += player_vel_y
player_vel_y(Y軸方向の速度)にgravity(重力)を足していくことで、Y軸方向の速度を徐々に減らしていき、かつ、player_pos[1](キャラクターのY座標)はplayer_vel_yと一緒に下がっていくように設定するといいでしょう!
# 地面での衝突判定
if player_pos[1] >= ground_level:
player_pos[1] = ground_level
player_vel_y = 0
is_jumping = False
地面との衝突判定は、ground_level(地面の高さ)よりplayer_pos[1](キャラクターのY座標)が低くなったら、状態を初期状態に戻してあげましょう!
まとめ
このように、Pygameで重力やジャンプを実装することは、基本的な物理演算を理解するためにも良い練習になります。ゲーム作りの中でこうした基礎的なアクションを身につければ、より複雑な動きやアニメーションにも応用できるでしょう!
コメント