[Technical Discussion] Optimal Solutions for Damage Number Display System /【技術討論】ダメージ数値表示システムの最適化に関する考察 /【技术讨论】关于伤害数字显示系统的实现方案探讨

中文原文

请问我该如何制作一个伤害显示文本?
我目前的实现流程是:

  1. 子弹 / 伤害框攻击到对方受击框
  2. 锁定目标对象
  3. 计算伤害值并存储在变量中
  4. 生成子对象(伤害文本)
  5. 子对象继承伤害值并显示

请问是否有更优方案或 AGM 自带的节点可以简化这个流程?

//

English Translation

Title: [Technical Discussion] Optimal Solutions for Damage Number Display System

Description:
I’m currently implementing a damage display system with the following workflow:

  1. Projectile/damage box collides with target’s hitbox
  2. Lock onto the target object
  3. Calculate damage and store in a variable
  4. Spawn a child object (damage text)
  5. Child object inherits damage value and displays it

Is there a more efficient way or built-in AGM nodes that can simplify this process?

//

日本語訳

タイトル: 【技術討論】ダメージ数値表示システムの最適化に関する考察

説明:
現在、以下の流れでダメージ表示システムを実装しています:

  1. 弾丸 / ダメージ判定が敵の当たり判定と接触
  2. 対象オブジェクトをロック
  3. ダメージ値を計算し変数に格納
  4. 子オブジェクト(ダメージテキスト)を生成
  5. 子オブジェクトがダメージ値を受け取り表示

このプロセスを簡素化する AGM プラグインの組み込みノードや、より効率的な実装方法はありますか?

新问题,AGM里面不能锁定大致上的变量,只能针对单一对象的变量,PGM(pixel game maker mv)里面锁定更改变量(只要有对应变量词条就能改变)

//
[Tool Issue] Variable Locking Limitation in AGM vs PGM MV

AGM limitation:

Can only lock variables specific to a single object, not generic variable types.

PGM (Pixel Game Maker MV) capability:

Can lock and modify variables globally by referencing their entry names, regardless of the object.

//

[ツール不具合] AGM と PGM MV の変数ロック機能の違い

AGM (ACT Game Maker) の制限:

単一オブジェクト固有の変数のみロック可能で、汎用的な変数タイプはロックできません。

PGM (Pixel Game Maker MV) の機能:

変数エントリ名を参照するだけでグローバルに変数をロック・変更できます(オブジェクトに依存しません)。

もしダメージ計算処理をAGMの基本処理に任せる場合は、「VariableSettings」ノードが持つ「taken_damage」の変数が便利です。
この変数はダメージを受けた時のダメージ数が自動的に格納されます。

これを利用し、子オブジェクト(ダメージ数値オブジェクト)は親オブジェクト(ダメージを受けたオブジェクト)の「taken_damage」変数を参照しダメージ数値を引き継ぐことができます。
子オブジェクトが一方的に親オブジェクトの数値を参照するだけなので多少効率的ではないでしょうか。

ただし子オブジェクトが親オブジェクトの「taken_damage」を参照する前に別のダメージを受けてしまうと、「taken_damage」に別の攻撃の数値が入ってしまいそれを参照してしまう事になるのでこのタイムラグをいかに制御するかが注意点となるかもしれません。
一般的には無敵時間がそれを解消してくれると思います。

この変数の使い方だと、子オブジェクトは1 対 1 の親オブジェクトにしか対応できないんですよね。
例えばダメージ表示用の UI を作った場合、「全オブジェクトのダメージを共通で表示」するような仕組みには対応できません。

対して Pixel Game Maker MV の変数システムは、データベース的なグローバル変数 として動作します。
「変数名が一致する限り、1 対多でオブジェクトを跨いで値を共有・変更」できるので、AGM のような制限がなく、柔軟な連携が実現できる点が大きな違いです。

確かにその通りでした。これは問題ですね…

別の方法に変えた喵!
「ダメージを受けたタイミングでオブジェクトを生成して、ダメージ数値を表示する」方式に切り替えたので、今後の挙動は様子見です

1.0.7パッチにより、
「指定ファイルパスではない親オブジェクトの変数」も参照してくれるようになりました!
(詳しい仕様はパッチのアナウンスを見てください)

AGM運営様のご配慮に感謝いたします!

本当にありがとうございます!!!
Thank you very much!!!

1 Like