リクエスト詳細
✨ 既存アプリの改善
対応完了
対象アプリ: RPGストーリーフォージ AI風ドット絵冒険
戦闘画面にフルスクリーン対応のアニメーション付きモンスタースプライトパネルを追加(攻撃・被弾・撃破ポーズ切替)
## 1. 目的
現在の戦闘画面ではモンスターのドット絵が表示されているが、攻撃・被弾・撃破といった状態変化に応じたアニメーション演出が乏しい。Canvas上でモンスタースプライトがポーズ切替アニメーション(待機・攻撃・被弾・撃破)を行うことで、戦闘の迫力と視認性を大幅に向上させる。また、ブラウザ全画面ゲームレイアウトにおいて、モンスタースプライト表示エリアをCanvas中央の大型パネルとして確立し、戦闘画面の主役にする。
## 2. 具体的な仕様
### 2-1. モンスタースプライト画像
- モンスター種別ごとに4ポーズ(idle / attack / hit / dead)×横並びのスプライトシート画像を用意する
- 画像は `/assets/monsters/` ディレクトリに `{monster_id}_sheet.png` 形式で配置
- 1フレームサイズ: 64×64px、横4コマ(idle×2, attack×1, hit×1)+ 撃破1コマ = 計5コマ(320×64px)
- スプライトシートは画像生成で作成した素材を使用(image_suggestions参照)
- モンスターIDとファイル名のマッピングをPHP配列(`rpgsf_assets()`の`monsters`キー)に追加し、シナリオ生成時に割り当てられたmonster_idから対応スプライトを参照する
- 対応スプライトが存在しない場合はCanvas上でドット絵フォールバック描画(既存動作を維持)
### 2-2. Canvasアニメーション制御(JavaScript)
- 戦闘Canvas(既存の`#battleCanvas`または相当要素)に以下のアニメーションステートマシンを追加
- `idle`: 待機ループ(2フレーム間隔、200ms/frame)
- `attack`: プレイヤーがダメージを受けたターン終了後に1回再生
- `hit`: モンスターがダメージを受けた直後に1回再生(200ms)
- `dead`: HPが0以下になった瞬間に再生し、以降フェードアウト(opacity 1→0、500ms)
- アニメーションループは `requestAnimationFrame` で実装
- 既存の `battle_fx`(`effects`・`meters`配列)のJSONを受け取り、`damage`イベント検出時に`hit`ポーズ、ターン終了時に`idle`へ戻す
- スマホではCanvas幅に合わせてスプライトを2倍スケール描画(`drawImage`の第9引数でdstW/dstHを指定)
### 2-3. 戦闘レイアウト調整
- ブラウザ全画面レイアウトの戦闘時、Canvasエリアを画面中央70%幅×上60%高さに配置し、モンスタースプライトを中央上部に大きく表示
- モンスターHP・名前は Canvas内にオーバーレイテキスト描画(既存のHUDパネルと重複しないよう右上HUDを活用)
- コマンドボタン群は画面下部パネル(既存の下部HUD)に集約し、モンスター表示領域を侵食しない
- スマホ縦持ち時はCanvas高さを画面の50%に制限し、下半分にコマンド/ログタブを表示(既存スマホ対応と整合)
### 2-4. PHPサイドの変更
- `rpgsf_assets()`の`monsters`配列に`sprite`キーを追加し、スプライトシートファイル名を記載
```php
'slime' => ['name' => 'スライム', ..., 'sprite' => 'slime_sheet.png'],
```
- `play.php`のPHP→JS変数渡し部分(`$scenario_json`等)にmonster_idとspriteファイル名を含めてJSONエンコードで渡す
- 画像ファイルが存在しない場合は`null`を渡し、JSでフォールバック処理
### 2-5. 既存機能との整合
- 既存のモンスタードット絵Canvas描画(カラーパレット・部位別)はフォールバックとして完全保持
- コンボゲージ、アイテムドロップ演出、HP低下演出など既存エフェクトはそのまま動作
- セーブ・ロード、シナリオ共有URLには一切影響しない
- 戦闘BGM・効果音タイミングはアニメーションポーズ切替と同期(hitアニメ開始時に被弾SEを再生)
## 3. 実装ステップ
1. `rpgsf_assets()`のmonsters配列にspriteキー追加(lib.php)
2. `/assets/monsters/` ディレクトリ作成と画像配置
3. play.phpのJS変数渡し部分にsprite情報追加
4. battleCanvas描画JSにスプライトシート読込・アニメーションステートマシン追加
5. 全画面レイアウトのCSS調整(戦闘時のCanvas配置比率)
6. スマホ対応確認(Canvas scaleとタブ切替の整合)
現在の戦闘画面ではモンスターのドット絵が表示されているが、攻撃・被弾・撃破といった状態変化に応じたアニメーション演出が乏しい。Canvas上でモンスタースプライトがポーズ切替アニメーション(待機・攻撃・被弾・撃破)を行うことで、戦闘の迫力と視認性を大幅に向上させる。また、ブラウザ全画面ゲームレイアウトにおいて、モンスタースプライト表示エリアをCanvas中央の大型パネルとして確立し、戦闘画面の主役にする。
## 2. 具体的な仕様
### 2-1. モンスタースプライト画像
- モンスター種別ごとに4ポーズ(idle / attack / hit / dead)×横並びのスプライトシート画像を用意する
- 画像は `/assets/monsters/` ディレクトリに `{monster_id}_sheet.png` 形式で配置
- 1フレームサイズ: 64×64px、横4コマ(idle×2, attack×1, hit×1)+ 撃破1コマ = 計5コマ(320×64px)
- スプライトシートは画像生成で作成した素材を使用(image_suggestions参照)
- モンスターIDとファイル名のマッピングをPHP配列(`rpgsf_assets()`の`monsters`キー)に追加し、シナリオ生成時に割り当てられたmonster_idから対応スプライトを参照する
- 対応スプライトが存在しない場合はCanvas上でドット絵フォールバック描画(既存動作を維持)
### 2-2. Canvasアニメーション制御(JavaScript)
- 戦闘Canvas(既存の`#battleCanvas`または相当要素)に以下のアニメーションステートマシンを追加
- `idle`: 待機ループ(2フレーム間隔、200ms/frame)
- `attack`: プレイヤーがダメージを受けたターン終了後に1回再生
- `hit`: モンスターがダメージを受けた直後に1回再生(200ms)
- `dead`: HPが0以下になった瞬間に再生し、以降フェードアウト(opacity 1→0、500ms)
- アニメーションループは `requestAnimationFrame` で実装
- 既存の `battle_fx`(`effects`・`meters`配列)のJSONを受け取り、`damage`イベント検出時に`hit`ポーズ、ターン終了時に`idle`へ戻す
- スマホではCanvas幅に合わせてスプライトを2倍スケール描画(`drawImage`の第9引数でdstW/dstHを指定)
### 2-3. 戦闘レイアウト調整
- ブラウザ全画面レイアウトの戦闘時、Canvasエリアを画面中央70%幅×上60%高さに配置し、モンスタースプライトを中央上部に大きく表示
- モンスターHP・名前は Canvas内にオーバーレイテキスト描画(既存のHUDパネルと重複しないよう右上HUDを活用)
- コマンドボタン群は画面下部パネル(既存の下部HUD)に集約し、モンスター表示領域を侵食しない
- スマホ縦持ち時はCanvas高さを画面の50%に制限し、下半分にコマンド/ログタブを表示(既存スマホ対応と整合)
### 2-4. PHPサイドの変更
- `rpgsf_assets()`の`monsters`配列に`sprite`キーを追加し、スプライトシートファイル名を記載
```php
'slime' => ['name' => 'スライム', ..., 'sprite' => 'slime_sheet.png'],
```
- `play.php`のPHP→JS変数渡し部分(`$scenario_json`等)にmonster_idとspriteファイル名を含めてJSONエンコードで渡す
- 画像ファイルが存在しない場合は`null`を渡し、JSでフォールバック処理
### 2-5. 既存機能との整合
- 既存のモンスタードット絵Canvas描画(カラーパレット・部位別)はフォールバックとして完全保持
- コンボゲージ、アイテムドロップ演出、HP低下演出など既存エフェクトはそのまま動作
- セーブ・ロード、シナリオ共有URLには一切影響しない
- 戦闘BGM・効果音タイミングはアニメーションポーズ切替と同期(hitアニメ開始時に被弾SEを再生)
## 3. 実装ステップ
1. `rpgsf_assets()`のmonsters配列にspriteキー追加(lib.php)
2. `/assets/monsters/` ディレクトリ作成と画像配置
3. play.phpのJS変数渡し部分にsprite情報追加
4. battleCanvas描画JSにスプライトシート読込・アニメーションステートマシン追加
5. 全画面レイアウトのCSS調整(戦闘時のCanvas配置比率)
6. スマホ対応確認(Canvas scaleとタブ切替の整合)
💬 返信 (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