アクション講座 第1回目
•
講座資料のプロジェクトファイル(zipファイル)はソフメwikiにアップしてます ので予めダウンロードしておいてください。•
講座資料のプロジェクトファイル(zipファイル)は解凍してソリューションファ イルを開く。•
URLは下記↓ http://softmedia.sakura.ne.jp/wiki/2017%E5%B9%B4%E5%BA%A6_%E3%82%A2%E3 %82%AF%E3%82%B7%E3%83%A7%E3%83%B3%E3%82%B2%E3%83%BC%E3%83 %A0%E8%AC%9B%E5%BA%A7今日やること(TODAY’S TOPIC)
ジャンプのプログラムについて•
課題•
1:ボタンの連続押しを防止させる アニメーションのプログラムについて•
課題•
2:マップチップの作成•
(おまけ)今回使ったDXライブラリの関数について軽~く紹介その前に・・・ (BEFORE THAT)
ゲームプログラミング•
講座の内容覚えてる?(ジト目) 今回配布•
したプログラムは、分割コンパイルや自作関数、それのプロトタイ プ宣言、構造体などが容赦なく含まれます。 上記•
の内、わからないまたは忘れたものがあったら、復習しておきましょ う。 ( ͡ ͜ ͡ )ジャンプのプログラムについて
(ABOUT THE PROGRAM OF
ジャンプのプログラムについて
(ABOUT THE PROGRAM OF JUMP)
ジャンプのアルゴリズムは
•
様々ですが、今回は加算・減算のみで出来るものを紹介します。
ジャンプのプログラムは
ジャンプのプログラムについて
(ABOUT THE PROGRAM OF JUMP)
•
どういうプログラムか?
1.
Jflagが0の状態でスペースキーを押す。すると、Jflagが1になる。ジャ ンプ中に追加でジャンプできなくなる。2.
変数pyにPlayer.Cyを保存(格納)する。後にPlayer.Cyから PLAYER_JUMPを減算。3.
Jflagが1になったら、変数tyにPlayer.Cyを保存(格納)し、Player.Cy(現 在のY座標)からpy(前回のY座標)を減算し、1加算する。4.
3.を初期位置400になるまで繰り返す。5.
400になったら、Jflagを0にする。ジャンプのプログラムについて
(ABOUT THE PROGRAM OF JUMP)
Y座標
時間 移動量
ジャンプのプログラムについて
(ABOUT THE PROGRAM OF JUMP)
•
まとめ
1.
Jflagを上手く使う!
使い方次第で二段ジャンプが出来る・・・かもしれない2.
ジャンプの表現は放物線を描くイメージで!
←当たり前3.
ジャンプのアルゴリズムは様々なので、他にも触れてみる。
これは一例です。他には物理法則を使った方法もあります。課題1:ボタンの連続押しを防止させる
スペースキーを
•
押し続けてもぴょんぴょん跳ばないようにしてみよう。
スペースキーを一度放して、再び跳べるように改良すること。
•
新たに整数型変数bflagを宣言し、0の時はジャンプ可、1の時は不
可。
(ヒント)さっきのJflagはどんな役割をしていたのかな?課題1:ボタンの連続押しを防止させる
•
答え• bflagの宣言
アニメーションのプログラムに
ついて(ABOUT THE PROGRAM
OF ANIMATION)
アニメーションのプログラムについて(ABOUT THE
PROGRAM OF ANIMATION)
•
忍者が左右に走っているアニメーションを例に説明します。アニメーションのプログラムについて(ABOUT THE
PROGRAM OF ANIMATION)
まず•
、下準備として下記の画像をそれぞれLoadDivGraph関数で分割読み 込みをする。 Created by ねこざめ NinjaL.png NinjaR.pngアニメーションのプログラムについて(ABOUT THE
PROGRAM OF ANIMATION)
•
例として、NInjaR.pngをLoadDivGraph関数で読み込みをしてみる。•
LoadDivGraph(”picture/NInjaR.png”,16,4,4,100,100,PlayerGraR)として読 み込む。 この画像では分割総数は16個、 画像のX方向の分割数、Y方向の 分割数はいずれも4、分割する画 像のサイズは100×100 1. 2. 3. 4. 5. 6. 7. 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 1.画像ファイルのパス 2.画像の分割総数 3.X方向の分割数 4.Y方向の分割数 5.分割するXサイズ 6.分割するYサイズ 7.分割した画像の格納をするint型の配列へのポインタアニメーションのプログラムについて(ABOUT THE
PROGRAM OF ANIMATION)
•
7.のPlayerGraRは配列へのポインタなので、配列として扱われる。 つまり•
、PlayerGraR[0]からPlayerGraR[15]まで下記の画像を分割し、1コマ ずつ格納される。 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15アニメーションのプログラムについて(ABOUT THE
PROGRAM OF ANIMATION)
•
もうこの時点でお気づきかと思いますが(切
実)、アニメーションのプログラムは配列の添
え字をひたすら変化させてできるものである。
ΩΩΩ< な、なんだってー!!アニメーションのプログラムについて(ABOUT THE
PROGRAM OF ANIMATION)
•
Player.cppのvoid PlayerAnime()を参照 配列PlayerGraR[]、PlayerGraL[]の添え字をframeとし、frameの値を変化させることでア ニメーションを作成します。 例)忍者を右に向かせ走らせたい時、frameの値をどう変化させるか? 解)frameの値を・・・→0→1→2→0→・・・永遠と繰り返す。 frame=(frame+1)%3 0 1 2アニメーションのプログラムについて(ABOUT THE
PROGRAM OF ANIMATION)
•
Player.cppのvoid PlayerAnime()を参照 問)忍者を左に向かせ走らせたい時、frameの値をどう変化させるか? 解)frameの値を・・・→2→3→1→2→・・・永遠と繰り返す。 frame=((3-frame)+1)%3+1 1 2 3アニメーションのプログラムについて(ABOUT THE
PROGRAM OF ANIMATION)
•
※警告
Player.cppのvoid PlayerAnime()を参照 frameの値の変化で間隔を設ける目的で、DXライブラリの関数WaitTimer (int)を使っていますが、実際のゲームプログラミングでそれを使うのは絶対にやめてください。
他のプログラムが一時的に止まってしまい、ゲームの挙動がおかしくなり ます。 WaitTimer(int)を使わずに済む方法を考えましょう。アニメーションのプログラムについて(ABOUT THE
PROGRAM OF ANIMATION)
まとめ
•
LoadDivGraph
1.
関数を使って画像の分割読み込む
2.
配列の添え字の値を変化させてモーションを付けよう!
WaitTimer
3.
()関数はアニメーションで
何が何でも
使わな
い!
課題2:マップチップの作成
•
LoadDivGraph関数を使って、画像を分割読み込みさせてマップチップを 作ってみよう。(当たり判定は抜き)•
新たにMap.cppを追加し、マップチップを初期化するvoid Map_Init()とマップ チップの描画をするvoid MapDraw()を作成 例)int MapGra[CHIP_NUM]; LoadDivGraph(“picture/MapChip.png”,4,2,2,50,50,MapGra);DrawGraph(x*MAP_CHIP_SIZE,y*MAP_CHIP_SIZE,MapGra[Map[y][x]],TRUE);
課題2:マップチップの作成
•
答え(1/2)• Map[][],MapGra[]の宣言
• MAP_X,MAP_Y,MAP_CHIP_SIZE, CHIP_NUMのマクロ定義
課題2:マップチップの作成
•
答え(2/2)• void Map_Init()とvoid MapDraw()のプロトタイプ宣言
最後
• にメイン関数で呼び出し
注)間違ってもwhile文の中にMap_Init()は書か ない事!While文の中に書いてプログラムを実 行すると最悪の場合パソコンが死にます。
おわり
次回 マップチップの当たり判定 スクロール 城之内死す