ゲームプログラミング

攻撃相殺当たり判定考察

攻撃相殺当たり判定処理は、攻撃当たり判定処理と統合すべきですね...。 攻撃相殺と攻撃とで、当たりの取り方が異なるのでやりにくいですが、とりあえず相殺対象となったオブジェクト同士は、以後の攻撃当たり判定処理対象外とすることで統合してみます。

当たり判定の種類別の当たり判定処理

現状想定している当たり判定の種類は以下の通り。 ステージ当たり判定 押し当たり判定 攻撃当たり判定 攻撃相殺当たり判定 これらはそれぞれ当たり判定の取り方が違います。 おおよそ以下のような感じにしてみます。 実際の当たり判定処理ではいろんなパラメ…

当たり判定改良考察

キャラ同士が重なった時、ヌルリと押し合うような処理があるのですが、この押し当たり判定を改良しようかと考え中。 この処理の当たり判定は、まず2オブジェクトの判定エリア同士の当たり判定をとり、重なっていれば2オブジェクトが離れるようにヌルリと移動…

ゲームを作るとき取得できると便利かもしれないキー入力状況情報パターン

まえがき キーボードを使うゲームは、当然キー入力の状況を受け取らないといけません。 どのキーが押されているか、押されていないか等。 Aキーが押されているか、押されていないかだけでなく、 もうちょっといろんなパターンでのキー入力状況を簡単に取得で…

SWFのゲームの動的なローディングって需要無いの?

ゲームで使う素材って、外部に置いて必要な時に読み込むという方法と、 はじめからSWFに埋め込んでおくという方法の2つがあるのですが、 作るときには読み込み、最終的には埋め込みでやるのが良いう話をちらほら聞きます。 埋め込んだ方がネットワーク関係な…

例のゲームシステムの対応を決めた

まだちゃんと分かってない。例のゲームシステム。 - 書き物 の続き。 StageManagerにcontext:IStageManagerCtxをメンバとして持たせます。 とする方法しかないかなぁ。 親Managerのデータを選択的に取得できるという意味では問題ないかと。 子Managerのexec…

まだちゃんと分かってない。例のゲームシステム。

『花火』でゲームシステムを考える - 書き物 ここで試したゲームシステムですが、まだちゃんと理解していませんでした。 分からないところというのが、マネージャーを多段に噛ました場合のメッセージ転送方法です。 例えば次のような構成で作る場合、 GameMa…

アクションゲームはキャラの状態管理がキモだと思う

前から思ってましたが、アクションゲームを作るときに一番深刻なバグが入りこみやすいのはキャラの状態遷移部分だと思います。 このへんにバグがあると直す時に困ります。 ソースを追うのも大変です。 どのタイミングで何がどうなっているのか、把握も困難で…

マップスクロール結果を他のオブジェクトの座標に反映させる

前の。マップスクロールのクラスができた - 書き物 マップスクロールって、チップをカメラ位置にならべて表示させるだけではなく、 直接マップスクロールに関わらないオブジェクトの座標調整も問題になってきます。 その座標調整には、前回チップを表示させ…

マップスクロールのクラスができた

ネーミングはちょっとしっくりきていないのですが、MapChipViewerクラスを作りました。 こんな感じで動きます。⇒■ ソースはコチラ。⇒■ 何やら使ってないクラスもありますが、主役は「mylib.system.map.MapChipViewer」です。 なんか妙な組み方になってますが…

『花火』でゲームシステムを考える

AS3の文法を覚えたはいいものの、どうやってゲームを作ればいいのかというとき、 ひとつ、プログラムの土台となるシステムを覚えればかなり楽になります。 僕は今まで、タスクシステムと思われる手法でやってきましたが、何やら別の方法があるようなので、『…

Bitmap直描きをしてみる

これまでアニメーションといえばFrameSpriteクラスを作って、 Flashのタイムラインでゲームを作る感覚でやってました。 このFrameSprite、実装は Sprite ┣ Sprite ┃ ┣ Bitmap ┃ ┣ Bitmap ┃ ・ ┃ ・ ┃ ・ ┃ ┣ Sprite ┃ ┣ Bitmap ┃ ┣ Bitmap ┃ ・ ┃ ・ ┃ ・ ・…

CPUの脳の作り方を思いついた

固定されたステージの中を賢く動いてちゃんと攻撃するCPUの頭を考えていました。 今まではif文を死ぬほど繰り出して二度と触りたくないコードになるのが基本でしたが、今回はうまくいきそうです。 作るものは以下3つ。 攻撃判定 移動先判定 移動手順定義 1は…

とんんでもないスピードでぶっ飛びたい

アクションゲームだけでなく、チップ単位の壁の当たり判定があるゲームを作る場合、必ず考えなければならないことがあります。 それは、壁のすり抜け対策。 アクションゲームを作っていて、これの対策を後回しにしている人間は、僕ぐらいなんじゃないかと。 …

ローディングを使って少し作ってみる

ローディングによる素材のロードと管理のめどが立ったので、ためしに『Sword』っぽいものを形作ってみました。結果、swfのファイルサイズは埋め込みと比べて当然激減し、コンパイル時のswfエンコーディングも兆速になりました。ゲームの素材が超多くなってき…

描画と処理開始のギャップを無くす、そんな設計

タスクシステムは、タスクという処理の塊をリストに登録し、メインループ(onEnterFrameとか)でリストに登録されたタスクの処理関数を一通りすべて実行するシステムです。 例えばそのリストへの登録を以下のようにするとします。 addTask(new Player()); こ…

描いたら消せる、そんな設計

ゲームというものには流れがありまして、プレイヤーを表示させても、ステージを描いても、処理の都合上いつかは消さなければなりません。ということで、一つの処理の塊が動作を終了する際、その処理の塊が描画したものは基本的にその処理の塊自身で消せるよ…

オブジェクト同士のコミュニケーション

今回作ったシステムが、なんだか色々出来そう...と思える理由の一つは、その設計が関連させたいオブジェクトを参照する手段が簡単だからではないかと思いました。これはAS1や3やの言語に関係なく、要は「設計」が大切ではないかと。 ...まあ、当たり前ではあ…

シーンにするかタスクにするか

これまで、ゲームのシーンとする場面を タイトル メインゲーム エンディング みたいなわけ方をしてゲームの流れを制御していました。「メインゲーム」部分のステージ1、2・・・というステージ切り替えの流れはタスクで行おうとしていました。 しかし、画面す…

敵の頭脳〜行動を領域ごとに切り替える〜

敵を自動で動かす方法の1つに、あるステージの中での敵の存在する座標ごとに行動を変化させるというものがあります。つまり「x座標が100〜200、y座標が300〜350なら右移動する」といったような、領域を設定し、その場所ごとに行動を設定していくというもので…

敵の頭脳の状態分け

以前状態移行についてのレポートを書く際、敵の脳を作る一つの手段を例に挙げました。この記事自体は状態移行のアルゴリズムを使ってソースを少しでも見やすくしようという企画でしたが、今回はこの時挙げた例が問題です。 敵の頭脳を作るアルゴリズムの定石…

状態移行について

ゲームというものは、状況の判定やパターンが増えれば増えるほどif文とかが多くなってソースがヤバイことになりがちです。特に敵の脳となる部分を作る場合なんて、特にififします。 今回はそういったifを減らしてソースを少しだけスッキリさせようという企画…

FrameSpriteクラス

前々からブツブツ言っていたFrameクラスの最終的な形です。Spriteを拡張してMovieClipのように複数のフレームを持てるようにしました。アニメーションさせたり、フレームアクションを設定することもできます。 package { import flash.display.DisplayObject…

タスクシステム〜タスク追加による実行の不平等の話〜

タスクシステムはタスクをリストに優先度順に登録し、登録されたタスクを1つずつ実行していくものですが、このタスクの登録によってタスクの実行が不平等になる現象があります。タスクシステムを調べる段階でこの現象の存在は知っていたのですが、特に気にし…

アニメーション機能が付きました。「フレームクラス」

前のフレームクラスの時に、 これ、上手いことしたらアニメーションとかもできるかもしれません。 と書きましたが、そろそろアニメーションも使いそうなので考えてみました。 前フレームクラスを改良しています。 /** * ・フレームクラス */ package lib.uti…

シェイプメーカークラス

通常AS3で四角形を描画する場合、例えば var rect:Shape = new Shape(); rect.graphics.beginFill(0xff000000); // 背景色 rect.graphics.lineStyle(0, 0x000000); // 線幅・線色 rect.graphics.drawRect(0, 0, 10, 10); // XY座標,幅,高さ rect.graphics.en…

フレームクラス

Flex2ではどうやらムービークリップを扱えないようです。 つまりフレーム一つ一つに動作を描き「gotoAndStop()」などで切り替えて状態移行が出来ないということです。 この状態移行は僕がFlashでゲームを作るときかなりの割合で使っていた方法なので、 今後…

レイヤークラス

それぞれのオブジェクトの重なり順を管理するために、 事前に大雑把にステージ用スプライトのようなものを作ってまとめておけるクラスがあったら それなりに便利かもしれないと思いまして考えてみました。 /** * ・レイヤークラス */ package { import flash…

Myタスクシステムレポート6

前回の続きです。 本日で最終回です。 ではさっそく「Ballタスク」を見てみましょう。 Ball.as 例のごとくTaskクラスを継承しています。 コンストラクタでは、BallFactoryクラスから渡された_rootを引数として持っています。 いよいよムービークリップ(以下…

Myタスクシステムレポート5

前回の続きです。 最終回は近いです。 前回現れた、「BallFactoryタスク」を見てみましょう。 BallFactory.as いよいよ、タスクシステムを使う場合のメイン部品であるタスクを見ていきます。 taskフォルダ内のBallFactory.asを見てみましょう。 名前から予想…