ゲームエンジン作ってみた
出てきた芽をつつくと昇天する
プログラムで、芽が突かれたらと言う判定をしていると言うよりは芽が自分が突かれた時の処理として昇天するアニメへ切り替えている
つまり、プログラムが制御すると言うよりは
オブジェクトが自分のシナリオデータに沿って動く
オブジェクト指向であり、データドリブンと言うのはこう言うことだと言う例にもなっている
マウスのクリック効果は録画ソフトがつけているので
ゲームエンジンで出してるわけではない
(やろうと思えばすぐにできる)
まだフレームレートの計算でよくわからないところがあって、
適当に調整してしまったんだけど
まぁ動いてるからとりあえずいいか・・・
計算合わないのがすっごい気持ち悪いんだけど・・・
アニメーションはAsepriteで作った
上に飛ばすときにもう一度クリックすることもできてしまうので、判定処理を抜くルーチンを実装してやらないといけない
まぁゲームエンジンは大体できてきた
インターバルで草を生成するルーチンは以下2つの指定をしてスプライトを生み出している
1.MebaeからIdleまで再生し、Idleはループさせるという指定でX、Y位置をランダム生成してスプライトを生成している
2.その際、当たり判定を物理演算の一種として登録している。
マウスクリックに当たっていたら「Pickup」へ切り替え、「Pickup」が終わったらスプライトは自己消滅するように指定している
全体のスプライト数もわかるので、60個までで草を生み出すのを止めている
function isPickUp(spr) {
if (spr.isTouched()) {
// Pickupが終わったら消えるように設定
spr.setTagNames(["Pickup","DIE"]);
}
}
function getRandomInt(max) {
return Math.floor(Math.random() * max);
}
async function dispatch() {
// 最大60個にしておく
if (gPrim.primitives.length <= 60) {
// 乱数で座標を生成
var x = 32 + getRandomInt(640 - 64);
var y = 32 + getRandomInt(480 - 64);
// ["Mebae", "Idle","REPEAT"]のように指定すると、Mebae、Idleの順に実行した後、Idleをリピートする
// ["Mebae", "Idle","DIE"]の場合はIdleを実行した後Spriteが消える
var sp = await Sprite.build("Futaba", jsMebae, ["Mebae", "Idle","REPEAT"], x, y, 1, 0);
sp.addPhysic(isPickUp);
gPrim.append(sp);
console.log("dispatched", x, y)
}
nextTime = 3 + getRandomInt(5) * 1000;
setTimeout(dispatch, nextTime);
}
RPGもシューティングも格闘ゲームもパズルも同じ組方で実装できる
ゲームの仕事が来た時に
その都度似たようなプログラムが組みたいならやればいい
わたしはその機種ごとにゲームエンジンを作ってからゲームを作る
ブラウザでよいのなら、ブラウザに特化したゲームエンジンを作り、
スマホにも対応させればよい
G123など、すでにやっているではないか?
あれを作ればいいだけのことだ