• 検索結果がありません。

アクション講座 第1回目

N/A
N/A
Protected

Academic year: 2021

シェア "アクション講座 第1回目"

Copied!
29
0
0

読み込み中.... (全文を見る)

全文

(1)

アクション講座 第1回目

(2)

講座資料のプロジェクトファイル(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

(3)

今日やること(TODAY’S TOPIC)

ジャンプのプログラムについて

課題

1:ボタンの連続押しを防止させる アニメーションのプログラムについて

課題

2:マップチップの作成

(おまけ)今回使ったDXライブラリの関数について軽~く紹介

(4)

その前に・・・ (BEFORE THAT)

ゲームプログラミング

講座の内容覚えてる?(ジト目) 今回配布

したプログラムは、分割コンパイルや自作関数、それのプロトタイ プ宣言、構造体などが容赦なく含まれます。 上記

の内、わからないまたは忘れたものがあったら、復習しておきましょ う。 ( ͡ ͜ ͡ )

(5)

ジャンプのプログラムについて

(ABOUT THE PROGRAM OF

(6)

ジャンプのプログラムについて

(ABOUT THE PROGRAM OF JUMP)

ジャンプのアルゴリズムは

様々ですが、今回は加算・減算のみで出来るも

のを紹介します。

ジャンプのプログラムは

(7)

ジャンプのプログラムについて

(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にする。

(8)

ジャンプのプログラムについて

(ABOUT THE PROGRAM OF JUMP)

Y座標

時間 移動量

(9)

ジャンプのプログラムについて

(ABOUT THE PROGRAM OF JUMP)

まとめ

1.

Jflagを上手く使う!

使い方次第で二段ジャンプが出来る・・・かもしれない

2.

ジャンプの表現は放物線を描くイメージで!

←当たり前

3.

ジャンプのアルゴリズムは様々なので、他にも触れてみる。

これは一例です。他には物理法則を使った方法もあります。

(10)

課題1:ボタンの連続押しを防止させる

スペースキーを

押し続けてもぴょんぴょん跳ばないようにしてみよう。

スペースキーを一度放して、再び跳べるように改良すること。

新たに整数型変数bflagを宣言し、0の時はジャンプ可、1の時は不

可。

(ヒント)さっきのJflagはどんな役割をしていたのかな?

(11)
(12)

課題1:ボタンの連続押しを防止させる

答え

• bflagの宣言

(13)

アニメーションのプログラムに

ついて(ABOUT THE PROGRAM

OF ANIMATION)

(14)

アニメーションのプログラムについて(ABOUT THE

PROGRAM OF ANIMATION)

忍者が左右に走っているアニメーションを例に説明します。

(15)
(16)

アニメーションのプログラムについて(ABOUT THE

PROGRAM OF ANIMATION)

まず

、下準備として下記の画像をそれぞれLoadDivGraph関数で分割読み 込みをする。 Created by ねこざめ NinjaL.png NinjaR.png

(17)

アニメーションのプログラムについて(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型の配列へのポインタ

(18)

アニメーションのプログラムについて(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

(19)

アニメーションのプログラムについて(ABOUT THE

PROGRAM OF ANIMATION)

もうこの時点でお気づきかと思いますが(切

実)、アニメーションのプログラムは配列の添

え字をひたすら変化させてできるものである。

ΩΩΩ< な、なんだってー!!

(20)

アニメーションのプログラムについて(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

(21)

アニメーションのプログラムについて(ABOUT THE

PROGRAM OF ANIMATION)

Player.cppのvoid PlayerAnime()を参照 問)忍者を左に向かせ走らせたい時、frameの値をどう変化させるか? 解)frameの値を・・・→2→3→1→2→・・・永遠と繰り返す。 frame=((3-frame)+1)%3+1 1 2 3

(22)

アニメーションのプログラムについて(ABOUT THE

PROGRAM OF ANIMATION)

※警告

Player.cppのvoid PlayerAnime()を参照 frameの値の変化で間隔を設ける目的で、DXライブラリの関数WaitTimer (int)を使っていますが、実際のゲームプログラミングでそれを使うのは

絶対にやめてください。

他のプログラムが一時的に止まってしまい、ゲームの挙動がおかしくなり ます。 WaitTimer(int)を使わずに済む方法を考えましょう。

(23)

アニメーションのプログラムについて(ABOUT THE

PROGRAM OF ANIMATION)

まとめ

LoadDivGraph

1.

関数を使って画像の分割読み込む

2.

配列の添え字の値を変化させてモーションを付けよう!

WaitTimer

3.

()関数はアニメーションで

何が何でも

使わな

い!

(24)

課題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);

(25)

課題2:マップチップの作成

答え(1/2)

• Map[][],MapGra[]の宣言

• MAP_X,MAP_Y,MAP_CHIP_SIZE, CHIP_NUMのマクロ定義

(26)

課題2:マップチップの作成

答え(2/2)

• void Map_Init()とvoid MapDraw()のプロトタイプ宣言

最後

• にメイン関数で呼び出し

注)間違ってもwhile文の中にMap_Init()は書か ない事!While文の中に書いてプログラムを実 行すると最悪の場合パソコンが死にます。

(27)

おわり

次回 マップチップの当たり判定 スクロール 城之内死す

(28)

(おまけ)

今回使ったDXライブラリの関数

について軽~く紹介

(29)

今回使ったDXライブラリの関数について軽~く紹介

LoadDivGraph(char *filename,int Allnum,int Xnum,int Ynum,int Xsize,int Ysize, int *HandleBuf ) 画像をメモリ上に分割読み込み アニメーションまたはマップチップの作成に役立つ

DeleteGraph(int GrHandle) 指定の画像をメモリ上から削除(解放)

WaitTimer(int time) time[ミリ秒]だけ処理を止める。

アニメーションの間隔を設ける

目的では使わない!(念押し)

参照

関連したドキュメント

IDLE 、 STOP1 、 STOP2 モードを解除可能な割り込みは、 INTIF を経由し INTIF 内の割り. 込み制御レジスター A で制御され CPU へ通知されます。

[3] Chari, Vyjayanthi, On the fermionic formula and the Kirillov-Reshetikhin conjecture, Int. and Yamada, Y., Remarks on fermionic formula, Contemp. and Tsuboi, Z., Paths, crystals

Tsouli, Infinitely many solutions for nonlocal elliptic p-Kirchhoff type equation under Neumann boundary condition, Int. Journal

今回の SSLRT において、1 日目の授業を受けた受講者が日常生活でゲートキーパーの役割を実

3:80%以上 2:50%以上 1:50%未満 0:実施無し 3:毎月実施 2:四半期に1回以上 1:年1回以上

3:80%以上 2:50%以上 1:50%未満 0:実施無し 3:毎月実施 2:四半期に1回以上 1:年1回以上

3:80%以上 2:50%以上 1:50%未満 0:実施無し 3:毎月実施. 2:四半期に1回以上 1:年1回以上

第1章 総論 第1節 目的 第2節 計画の位置付け.. 第1章