リクエスト詳細
✨ 既存アプリの改善
対応完了
対象アプリ: RPGストーリーフォージ AI風ドット絵冒険
戦闘・マップ画面にキャラクター/NPC/ボスのCanvas手描き風ドット絵スプライトシートを追加(ポーズ別アニメーション対応)
## 1. 目的
現在、主人公・仲間・NPC・ボスのドット絵は職業/モンスター種別ごとのカラーパレット+部位別Canvas自動生成で描画されているが、ポーズ(待機・攻撃・被弾・勝利・敗北)ごとのフレーム切り替えアニメーションが未実装のため、戦闘・マップ上のキャラクターが静止して見える。本改善では「ポーズ別スプライトシート」をCanvasで自動生成し、戦闘フェーズとマップ移動に連動したフレームアニメーションを追加する。
## 2. 具体的な仕様
### 2-1. スプライトシート生成(JS Canvas)
- 1キャラクター = 5ポーズ × 2フレーム = 10コマ を横並びで描画した 160×32px(1コマ16×32px)のオフスクリーンCanvasを生成する。
- ポーズ定義: `idle`(待機/2フレーム揺れ)、`attack`(前進+剣振り)、`hurt`(後退+点滅)、`victory`(腕上げ)、`dead`(横倒し)
- 描画は既存の「職業別カラーパレット+部位別ドット絵」ロジックを流用し、各ポーズでオフセット値(頭Y・腕X・足X)を変化させることで差分アニメーションを実現する。
- モンスター側も同様に `idle`(上下揺れ2F)、`attack`(前進1F)、`hurt`(赤フラッシュ2F)、`dead`(縮小+透過)の4ポーズ×2フレーム構成にする。
### 2-2. 戦闘画面への組み込み
- 戦闘Canvasの描画ループ(requestAnimationFrame)内で、現在のターンフェーズ(`player_turn` / `enemy_turn` / `result`)に応じてスプライトのポーズを切り替える。
- アクション発生時: `action` POST応答後に `battle_fx` の `effects` 配列を参照し、`damage` なら対象に `hurt`→`idle` を500ms後に戻す、`heal` なら緑オーラエフェクトを重ね描き。
- 勝利判定時: 全プレイヤーキャラクターを `victory` ポーズに切り替え、1秒間ループ再生してからリザルトパネルを表示する。
- 敗北判定時: `dead` ポーズで縮小しながらフェードアウト。
### 2-3. マップ画面への組み込み
- プレイヤーキャラクターのマップ上スプライトを `idle`(2フレーム)でループアニメーション(500ms/フレーム)する。
- 移動キー入力中は移動方向に合わせて足元フレームを切り替える(左右反転はscaleX: -1で対応)。
- NPC(village/cave/sanctuaryのサブマップ上)も `idle` 2フレームでゆっくり揺れる。
### 2-4. ボス専用大型スプライト
- シナリオのラストバトル(`state['boss']` フラグが立っている場合)は、通常モンスターの2倍サイズ(32×64px)で描画する。
- ポーズは通常モンスターと同じ4種だが、`attack` ポーズ時に画面揺れ(Canvasのtranslateを ±3px で3回振動)を追加する。
### 2-5. パフォーマンス配慮
- スプライトシートはシナリオロード時(play.phpのDOMContentLoaded)に一括生成してJSオブジェクトへキャッシュし、以降は再生成しない。
- requestAnimationFrameは戦闘Canvas描画中のみ有効化し、マップ画面ではsetInterval(500ms)に切り替えて負荷を抑える。
## 3. 既存機能との整合(壊さない点)
- 既存の「部位別カラーパレット+モンスタードット絵Canvas」は本改善でスプライトシート生成の基盤として流用するため、削除・変更しない。
- `battle_fx`(SESSION経由のダメージ/ヒール/EXPゲージ演出)は既存ロジックをそのまま使い、アニメーション起動のトリガーとして参照するのみ。
- PHP側・DBスキーマの変更は一切不要。JS追加のみで完結する。
- スマホ対応: タッチ操作の遅延防止のため、アニメーションはCSSアニメーションではなくCanvas描画に統一する。
## 4. 実装ファイル
- `pages/play.php` の `<script>` ブロック内に `RpgSpriteSheet` クラスを追加し、既存の戦闘Canvas描画関数・マップCanvas描画関数から呼び出す形で組み込む。追加行数の目安は約250〜350行。
現在、主人公・仲間・NPC・ボスのドット絵は職業/モンスター種別ごとのカラーパレット+部位別Canvas自動生成で描画されているが、ポーズ(待機・攻撃・被弾・勝利・敗北)ごとのフレーム切り替えアニメーションが未実装のため、戦闘・マップ上のキャラクターが静止して見える。本改善では「ポーズ別スプライトシート」をCanvasで自動生成し、戦闘フェーズとマップ移動に連動したフレームアニメーションを追加する。
## 2. 具体的な仕様
### 2-1. スプライトシート生成(JS Canvas)
- 1キャラクター = 5ポーズ × 2フレーム = 10コマ を横並びで描画した 160×32px(1コマ16×32px)のオフスクリーンCanvasを生成する。
- ポーズ定義: `idle`(待機/2フレーム揺れ)、`attack`(前進+剣振り)、`hurt`(後退+点滅)、`victory`(腕上げ)、`dead`(横倒し)
- 描画は既存の「職業別カラーパレット+部位別ドット絵」ロジックを流用し、各ポーズでオフセット値(頭Y・腕X・足X)を変化させることで差分アニメーションを実現する。
- モンスター側も同様に `idle`(上下揺れ2F)、`attack`(前進1F)、`hurt`(赤フラッシュ2F)、`dead`(縮小+透過)の4ポーズ×2フレーム構成にする。
### 2-2. 戦闘画面への組み込み
- 戦闘Canvasの描画ループ(requestAnimationFrame)内で、現在のターンフェーズ(`player_turn` / `enemy_turn` / `result`)に応じてスプライトのポーズを切り替える。
- アクション発生時: `action` POST応答後に `battle_fx` の `effects` 配列を参照し、`damage` なら対象に `hurt`→`idle` を500ms後に戻す、`heal` なら緑オーラエフェクトを重ね描き。
- 勝利判定時: 全プレイヤーキャラクターを `victory` ポーズに切り替え、1秒間ループ再生してからリザルトパネルを表示する。
- 敗北判定時: `dead` ポーズで縮小しながらフェードアウト。
### 2-3. マップ画面への組み込み
- プレイヤーキャラクターのマップ上スプライトを `idle`(2フレーム)でループアニメーション(500ms/フレーム)する。
- 移動キー入力中は移動方向に合わせて足元フレームを切り替える(左右反転はscaleX: -1で対応)。
- NPC(village/cave/sanctuaryのサブマップ上)も `idle` 2フレームでゆっくり揺れる。
### 2-4. ボス専用大型スプライト
- シナリオのラストバトル(`state['boss']` フラグが立っている場合)は、通常モンスターの2倍サイズ(32×64px)で描画する。
- ポーズは通常モンスターと同じ4種だが、`attack` ポーズ時に画面揺れ(Canvasのtranslateを ±3px で3回振動)を追加する。
### 2-5. パフォーマンス配慮
- スプライトシートはシナリオロード時(play.phpのDOMContentLoaded)に一括生成してJSオブジェクトへキャッシュし、以降は再生成しない。
- requestAnimationFrameは戦闘Canvas描画中のみ有効化し、マップ画面ではsetInterval(500ms)に切り替えて負荷を抑える。
## 3. 既存機能との整合(壊さない点)
- 既存の「部位別カラーパレット+モンスタードット絵Canvas」は本改善でスプライトシート生成の基盤として流用するため、削除・変更しない。
- `battle_fx`(SESSION経由のダメージ/ヒール/EXPゲージ演出)は既存ロジックをそのまま使い、アニメーション起動のトリガーとして参照するのみ。
- PHP側・DBスキーマの変更は一切不要。JS追加のみで完結する。
- スマホ対応: タッチ操作の遅延防止のため、アニメーションはCSSアニメーションではなくCanvas描画に統一する。
## 4. 実装ファイル
- `pages/play.php` の `<script>` ブロック内に `RpgSpriteSheet` クラスを追加し、既存の戦闘Canvas描画関数・マップCanvas描画関数から呼び出す形で組み込む。追加行数の目安は約250〜350行。
💬 返信 (4)
[AI企画部]
画像生成が完了しました。次の開発サイクルで開発に進みます。
画像生成が完了しました。次の開発サイクルで開発に進みます。
🛠 開発を開始しました (機能追加 (rpg-story-forge))
ご要望ありがとうございます。AI 開発ワーカーが実装を開始します。
通常 5〜30 分で Pull Request を作成し、レビュー後にリリースされます。
ご要望ありがとうございます。AI 開発ワーカーが実装を開始します。
通常 5〜30 分で Pull Request を作成し、レビュー後にリリースされます。
📝 開発が完了しました
ご要望いただいた内容の実装が完了し、最終チェック段階に入りました。
レビュー (自動) → リリース、の流れで進みます。
もう少々お待ちください。
ご要望いただいた内容の実装が完了し、最終チェック段階に入りました。
レビュー (自動) → リリース、の流れで進みます。
もう少々お待ちください。
✅ リリース完了のお知らせ
ご要望いただいた「RPGストーリーフォージ AI風ドット絵冒険」を実装し、リリースいたしました。
【ご利用方法】
ダッシュボード: https://www.aiapps.jp/?action=dashboard
アプリ詳細: https://www.aiapps.jp/apps/show.php?slug=rpg-story-forge
デモ環境は 1 時間以内に自動構築されます:
https://www.aiapps.jp/demo/rpg-story-forge/
ご利用ありがとうございます!
ご要望いただいた「RPGストーリーフォージ AI風ドット絵冒険」を実装し、リリースいたしました。
【ご利用方法】
ダッシュボード: https://www.aiapps.jp/?action=dashboard
アプリ詳細: https://www.aiapps.jp/apps/show.php?slug=rpg-story-forge
デモ環境は 1 時間以内に自動構築されます:
https://www.aiapps.jp/demo/rpg-story-forge/
ご利用ありがとうございます!
Echo
Iris