1日1つとは限りませんし、ひとことだけとも限りません。
もう12月って正気ですか?
AtCoderは安定してABC問題まで解けるようになってきたものの、中々D問題が解けません。
公式解説放送で話していましたが、配点を見てE問題を先に解くのもアリとのこと。なるほど。
Godotを用いて作成中のブロック崩しゲームが良い感じに仕上がってきた(気がする)ので、試しに公開してみます。 ここからプレイできます。
GodotのWebエクスポートは少し手間取りました。
Error
The following features required to run Godot projects on the Web are missing:
Cross Origin Isolation - Check web server configuration (send correct headers)
SharedArrayBuffer - Check web server configuration (send correct headers)
このようなエラーが出てうまく行きません。調べたところ、.htaccessに下記を追記しないといけないようです。
Header set Cross-Origin-Embedder-Policy "require-corp"
Header set Cross-Origin-Opener-Policy "same-origin"
参考 https://worktoolsmith.com/post-66581/
Godotはとても良いゲームエンジンで、Unityとかより遥かに好感が持てます。ただ、結局エンジン使わずにコードカタカタスタイルに戻りそうな気もしています…
理由としてはいくつかありまして、
otsu36のゲームサイトを独立させようと思って作業中。サブドメインの設定方法を思い出せずに四苦八苦していました。ssl対応辺りを済ませたらアクセスできるようになりました。
というわけでhttps://games.otsu36.netが解放されました。コンテンツはなんもなし。
今日AtCoderあるかと思っていたのですが、ありませんでした。明日にずれていたようです。
さて、ブロック崩しゲームにちょっとしたストーリーを付けました。otsu36.netとしての1作目が完成しました。めでたい。めでたいので、新人フリーゲームコンテストに応募しました。
高校生の頃の自分に伝えたらどんな顔をするだろうか。いや当時からプログラミングは齧っていたから、遅すぎると言うかもしれない。 何にせよ、フリゲ制作は永く趣味にしていきたいところです。
Phaser入門しました。やっぱvscodeカタカタスタイルの安心感半端ないです。ただ、一応ゲームエンジン的な作りになっているので、Phaserでのお作法を学ばなければなりません。
とりあえず環境構築書きます。
1. node.js インストール
2. npm create vite@latest
3. 指示に従ってTypeScriptとか設定する フレームワークはvanillaでOK
4. npm install typescript phaser
5. npm run dev でローカルサーバ実行
Phaserについての忘備録。
Sceneクラスがメインの実行部で、タイトルシーンとかメニューシーンとかゲームシーンとかを作っていく感じ。Sceneはメソッドpreload(),create(),update()を持つ。p5.jsやopenFrameworksと似てる。preload()は画像とか読み込むための関数。
STGの弾みたいな大量のオブジェクトを管理するためにGroupが用意されている。Phaser.GameObjects.GroupとPhaser.Physics.Arcade.Groupがあり、後者は物理エンジンの一部。前者の方がシンプルそうだが、せっかくなので物理エンジンの方を使ってみる。
PhaserのObjectはactiveかどうかを保持できて、Groupは各Objectの状態管理もできる。便利。オブジェクトプール的な使い方をする。
class BulletGroup extends Phaser.Physics.Arcade.Group {
constructor(scene: Phaser.Scene) {
super(scene.physics.world, scene);
this.createMultiple({
classType: Bullet,
frameQuantity: 1024,
active: false,
visible: false,
key: "bullet"
})
}
shootBullet(init_x: number, init_y: number, angle: number, speed: number) {
// 非activeな要素を探索して返す
const laser: Bullet = this.getFirstDead(false);
if (laser) {
laser.fire(init_x, init_y, angle, speed);
}
}
}
そつろんだせたぜ 後は野となれ山となれ
1月後半何も書いてないですけどそういうことです。サボりすぎたのもあり、人生で一番きつい時期だったかもしれません。いやどうだろう 、受験期の方が上かな?
終了ーーーーーー!!!!!!!全て終わり!!!解放!!!!
というわけで、卒論発表どうにか乗り越えました。指導教員ではない先生からの「良いと思います」が一番心に染みました。救われた。
卒論執筆&発表準備中はずっと指導教員の理想の押し付けがしんどかったので、博士には行きません。
今日は同期と中華で宴を開いて帰ってきました。
そしてあほげーのお題が発表されました。「スナック」だそうで。面倒なモノが全て終わったので、一発あほなゲームを作るとしますか!!