忍者ブログ
「Gamemakerでゲームを作って見よう」 ということで、作業メモっぽい使い方をする予定。 愚痴なんかが多くなるかも・・・
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。


実に久しぶりにゲームセンターに行ってまいりました。
思い返せば学生時代、行きつけのゲームセンターには4~5台は必ず遊ぶ筺体が置いてあったものですが、
長いこと行っていないとそう言ったものがなくなっていくものなんですね~。
当時はまっていた「ぐわんげ」、「バーチャロンオラトリオタングラム」、「虫姫様」、「ブレイジングスター」とうのゲームはもはや見かけることもなくなりました。(というか古すぎる)
とはいえ、「怒首領蜂大往生」「メタルスラッグ2」があったのでひとまずは満足でした。

さて、ゲーム制作の方はと言えば、メニュー画面をポチポチと作っていました。
Gamemaker8は日本語をサポートしていないので、mbtextスクリプトを導入しているのですが、これで変数の値を表示するのに四苦八苦していました。
普通に文字を表示する場合は
mbtext_draw(”文字列”,x,y);
とすればいいのですが、文字列のところに変数を入力すると、その部分が空白となってしまいうまくいきませぬ。
どうしたらいいかと色々考えた結果、いったん変数の値を文字列に変換し、文字列として表示させるという考えに思い至りました。
たとえば、プレイヤーキャラのレベル(LV)、体力(hp)、最大体力(maxhp)を表示したいときは
hp=string(obj_player.hp);
maxhp=string(obj_player.maxhp);
LV=string(obj_player.LV);
mbtext_draw(hp,100,100);
mbtext_draw(maxhp,100,116);
mbtext_draw(LV,100,132);

となります。
string()というのは実数値を文字列に変換する関数です。
とりあえず、プレイヤーキャラの情報を表示できるようになったので、項目選択や、表示切替といった
メニュー画面らしいことができるようにしていきたいです。

拍手

PR

一応基本的な動作もできましたので、特殊な動作を色々と追加してみました。
・ショートダッシュ
キーを二回押す、またはダッシュキーを押すと一定距離をダッシュするという動作です。
「キーを二回、一定時間内に押す」
という操作をどうやって認識するかが問題となるわけですが、アラームを使うと楽です。
例えば左キーでの場合
if(keyoard_check_pressed(vk_left))
{
  if(alarm[0] == -1)
        alarm[0] = 40;//アラーム[0]に40の値を代入
     if(alarm[0] > 0)
        alarm[1] = 60;
}
if(alarm[1] > 0)
       x += 6 * image_xscale;

alarm[0]の値は一回目のキー入力から二回目のキー入力までの制限時間です。
アラーム[0]が0にならないうちに次のキー入力があった場合、アラーム[1]に値を入力します。
この値はダッシュさせ続けたい時間です。
アラーム[1]が0より大きい限りダッシュし続けるわけです。
ちなみにアラームはアラームイベントを設定しないと動いてくれないので注意です。
・二段ジャンプ
空中でもう一回ジャンプができるという動作です。
jump_countという変数を作り、2を代入しておきます。
これがジャンプできる回数です。
そして、ジャンプにif文を追加します。
if(jump_count  > 0)
{
     ジャンプに関する処理
  jump_count -= 1;

jump_count が0でない限りジャンプができるという処理です。
ちなみに、キャラが地面にいる時はjump_countを初期値にします。

また、今回のゲームに実装するつもりはありませんが、コマンド入力を作ってみました。
仕組みはショートダッシュの応用です。
キー1が入力される→アラーム0に制限時間を代入→アラーム0が0でなく、キー2が押された
→アラーム1に制限時間を代入・・・・・
これで最後のきーが押されると処理が実行されます。
おそらくもっといい方法があると思うので、暇を見てkしりょうしていこうかな、と思ってます。

あと、ゲーム素材となるドット絵を作ろうと思い立ち、いろいろとやってみました。
ツールはEDGEを使うことにしました。
レイヤー機能が使えたり、アニメーションをプレビュー出来たりと、ゲームのドット絵を作るのには便利な機能があっていい感じです。で、早速作ってみたのがこちら
doukutu.png


まあ、いわゆるパロディーというやつなんですが、なかなかの出来ではないかと自画自賛しています。
もうすこしツールになれたらオリジナルの素材で主役を描いてみたいと思っています。
今回は以上です。
f95e9ca1.PNG

拍手

キャラの動作とは関係のない部分を色々といじってみました。
・ライフゲージ
これまで飾りだったライフゲージを実装しました。
draw_rectangleを使ってライフをバーで表示しています。
また、ライフを数字でも表示しています。
あと、現在装備中の武器が表示されるようにもしてあります。
・ゲームロードの実装
今のところ大したことはしていないのですが、ゲームを実行したときにゲームに関する設定を読み込むように設定しました。例えば、リソースファイルの一部をここで読み込ませれば、ゲームそのものの起動は速くなります。(ただ、起動してからリソースの読み込みに時間を取られますが・・・)
ゲームに使用するキーの設定もここで読み込ませています。
・セーブ、ロードの追加
一応セーブ、ロードを作りました。今のところデータを暗号化して、テキスト形式でファイルに書き込み、読み込みが出来るようにしてありますが、データの改変がしやすいため出来ればバイナリファイルで扱えるようにしたいところです。

あと、一応どんな感じで動くのかを動画にしてみました。
設定に問題があったのか、カクカクした動画ですが、よろしかったら見て下さいな。

拍手

前回はかなり説明を省いた更新でしたので、今回はみっちりとやりたいと思っております。

今回は弾をどのように飛ばすかを設定について触れて行きたいと思います。

1.まっすぐに飛ぶ弾
これに関してはそう難しいことはしていません。
基本的にキャラの向きに合わせて飛ぶ方向、弾のスプライトを変更するだけです。
左右に関してはプレイヤーキャラのimage_xscale を参照するようにし、hspeedにかけてやるようにしています。
上下に関してはvspeedをあたえて、image_speedを変更するようにしています。
2.ロケット弾
徐々に速度をあげ、着弾と同時に爆発します。
速度に関しては初速を1にして、ステップイベントで掛け算をしていきます。
速度が一定の値に達したらその値で固定されるようにします。

if(spd < 8)
{
    spd *= 1.1;
}

着弾後の処理は、まずコリジョンイベントでロケットを消し、destroyイベントで爆発のオブジェクトを生成します。
生成する座標はランダムにします。

repeat(random_range(15,30))
{  
    bull=instance_create(x + random_range(-30,30),y + random_range(-30,30),
    obj_effect_bomb);
}
上の例では着弾点の縦横60の範囲に15~30このエフェクトが作られるようになっています。

3.バウンドする弾
地面、壁に当たるとバウンドし、横方向には一定のスピードで進む。

これに関しては試行錯誤を繰り返しました。
イメージとしてはスーパーマリオのファイアーボールなんですが、壁に当たっても跳ね返るというところがネックに・・・
弾が生成された時点で上向きにスピードを加え、重力を常にかけ続けます。
こうすることで放物線を描きながら落下するようになります。
地面に当たったときは上向きに初速と同じスピードを与えてやります。
横方向の速度は常に一定で、壁に当たったときに向きを逆にしてやります。
また、弾の上側が壁にぶつかったとき(上昇中にこれ以上上に行けなくなった時)はvspeedを0にしてやります。
これで、放物線を描きながらポンポンと跳ねまわる弾の完成です。

4.マシンガン
ボタンを押しっぱなしの時に弾を撃ち続けるということですので、
keyboared_checkを使います。
ただ、このままではとんでもない量の弾が撃ち出され続けるので、制限を設けます。
count_bulletという変数をつくり、ここにウエイトをかけたいステップ数を代入します。
count_bulletはステップごとに-1し続け、0になると弾が発射されるようにします。

5.波打つように飛ぶ弾
これには三角関数を使いました。
水平方向に飛ぶときはvspeedsinの値を
垂直方向に飛ぶときはhspeedcosの値を掛けます。

time += 1;
if(abs(hspeed) == spd){vspeed = -3*sin(radtodeg(time));}
if(abs(vspeed) == spd){hspeed = -3*cos(radtodeg(time));}
radtodeg
はラジアンを度に変換する関数です。

6.レーザー
長い弾を飛ばします。
ただ生成するだけですといきなり長い弾が現れてしまい大変に不自然ですので、銃口から少しずつ伸びていくような感じにしています。
レーザーをパーツに分けて、それを順番に表示するようにし、全部表示されたらまとめて飛ばすようにしています。

以上が実装した弾に関する設定です。必要に応じて(またはその場の思いつきで)増やしていくかもしれません。
あと、そろそろどんな感じで動くのかを動画で紹介できたらな~、とか考えています。

 

拍手

古本屋めぐりをしていたら、スティーブンキングのドリームキャッチャーがだいぶ安く売っていたので、即購入。
文庫4冊で1000円以内というお手頃価格だったのですが、1,2,4,4(全4巻)という残念な買い間違いをしてしまって意気消沈している男です。こんにちわ・・・

だいぶ間が空きましたが攻撃を実装しました。
基本的に前方に弾を飛ばすという形式ですので、それ程苦労はありませんでした。
今回実装したのは
・前方に飛ぶ弾
・地面、壁に当たるとバウンドする弾
・壁、敵に当たると爆発する弾
・マシンガンのようにボタン押しっぱなしで連射できる弾
・波打つような軌跡で飛ぶ弾
・レーザーのように長い弾
です。
ショットボタンを押すと弾を生成します。
この弾の元となるオブジェクトをobj_bulletとして、プレイヤー側で設定されたショットの種類によって
弾の画像、飛び方を変えるように設定しました。
ショットの種類をキーで切り替えれるようにもしました。
弾ごとの説明はまた次回に持ち越したいと思います。(なるたけ近いうちに・・・)

拍手

[1]  [2]  [3]  [4]  [5]  [6
アクセスカウンター
プロフィール
HN:
性別:
男性
趣味:
読書・ゲーム
自己紹介:
・好きな作家
夢枕獏/綾辻行人/椎名誠/北杜夫/スティーブンキング
・ハマったゲーム
R-TYPE/WILD ARMSシリーズ/イースシリーズ/九龍妖魔学園紀/SIREN/ぐわんげ/プロギアの嵐/エスプレイド/エスプガルーダ/式神の城
カレンダー
04 2025/05 06
S M T W T F S
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
ブログ内検索
最新コメント
[04/30 dean]
[04/29 管理人]
[04/29 dean]
[04/08 管理人]
[04/07 dean]
忍者アナライズ
バーコード
フリーエリア
Copyright (C) Gamemakerでも使ってみる

Template by あでる / Material by 素材くん「無料WEB素材屋」 / 忍者ブログ [PR]