Pygameで重力とジャンプを作る!初心者向けのゲームアクション実装ガイド

ゲーム

ゲームを作るうえで「キャラクターがジャンプする」「重力に従って落ちる」という要素は、多くのプラットフォームゲームで重要な機能です。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で重力やジャンプを実装することは、基本的な物理演算を理解するためにも良い練習になります。ゲーム作りの中でこうした基礎的なアクションを身につければ、より複雑な動きやアニメーションにも応用できるでしょう!

コメント

タイトルとURLをコピーしました