問題タブ [avm2]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
actionscript-3 - スクリプト変数のプロパティにアクセスする予期しない動作
次の actionscript3 プログラムを実行しようとしましたが、f() 関数の呼び出し結果に驚きました。f() の結果が「1」または少なくとも「未定義」であることを期待していましたが、「0」の値は意味がありません。
この動作について説明がある場合、またはこの動作を「正常」と見なすかどうかを教えていただければ幸いです。AVM2 が実際にどのように機能するかを理解するために、Action Script プログラムの動作を研究していることを正確に述べたいと思います。したがって、同等のコードに同じことを行うよう求めているわけではありません。結果として、他のトリッキーな例があれば、私も興味があります。
注: このプログラムを次のコマンド ラインでコンパイルしました。
flash - Flash ActionScript3 コンパイラが不要なコードを出力するのはなぜですか?
最近、AVM2/AS3 用の逆コンパイラを作成しましたが、Flash コンパイラが不要なコードを大量に発行する傾向があることに気付きました。たとえば、特定のアプリケーションでは、機能を損なわずにコードの約 10% を削除しました。これは、条件付きオペコードや例外処理ブロックによって参照されない、確かにデッド コードでした。
また、このスニペットを見てください。
もちろん、これは無効なコードであり、無効なコードであるため、悪影響を与えることはありません (コードベースの肥大化を除く)。しかし、なぜそのコードを発行するのでしょうか? そして、なぜ検証者はそれを受け入れるのですか?
flash - Adobe AS3-「コアライブラリ」はどのように機能しますか?
まず第一に、私はこれをここで尋ねるべきか「プログラマー」で尋ねるべきかを決めることができませんでした、穏やかにしてください;)
AS3の「コアライブラリ」と呼ばれるものの内部で何が起こるのだろうか(そうです、この場合は正確な用語ではないかもしれませんが、それでも私が何を意味するのかがわかります)。
たとえば、次のように入力すると、次のようになります。
...グラフィックオブジェクトで正確に何が起こりますか?AVM2のレンダリングAPIの呼び出しになると思いますが、これはどのように見えますか?それを見る方法はありますか、またはこれらのソースはアドビ以外の人のために完全に閉鎖されていますか?
ありがとう!
actionscript-3 - プロパティのいずれかが変更された場合、Flash はムービークリップへのキーフレーム情報の適用を停止しますか?
ボックス (インスタンス名 "box") を持つ 3 フレームの MovieClip があるとします。フレームごとに異なるぼかしがボックスに適用されるため、フレーム 1 では少しぼかし、フレーム 2 では少しぼかし、フレーム 3 では非常にぼかします。
3 つのフレームのいずれかで「gotoAndStop」を呼び出すと、正しいぼかしが適用されます。これを何度でも問題なく実行できます。
ただし、「box.width = 100」などのボックスの幅を変更すると、突然「gotoAndStop」を呼び出すと、キーフレーム情報が適用されなくなり、ボックスのぼかしは変更されません。フレーム 2 にも位置の変更を追加すると、同じ動作が発生します...ボックスの幅を変更するまで、位置の変更は gotoAndStop で機能し、そのフレームに出入りしても移動しなくなります。
キーフレーム オブジェクトの「幅」などのプロパティを変更すると、Flash がこのようなキーフレーム情報の適用を停止するのはなぜですか?
flash - AVM2 バイトコードからアクション スクリプトに戻りますか?
現在、解凍および逆コンパイルした .swf ファイルがあります。ABC Bytecode の使用方法に関するチュートリアルを探し回っていますが、あまり見つかりませんでした。それを ActionScript 3 に戻すことができるデバッガー プログラムはありますか?
フライング2はこれをしますか?または Adobe フラッシュ プロジェクター デバッガーですか。またはAS3ソーサラー?
performance - ActionScript 3 でクラスを拡張すると、どのような悪影響がありますか?
私のゲーム エンジンでは、物理演算に Box2D を使用しています。Box2D の命名規則と貧弱なコメントは、私のエンジンの一貫性があり十分に文書化された残りの部分を台無しにします。
Box2D の一連のラッパー クラスを作成することを検討しました。つまり、共通の Box2D オブジェクトのそれぞれを拡張し、エンジンの残りの部分の命名規則に従って関数を書き直して、より明確かつ一貫したコメントを付けるクラスです。一部のクラスの上に構築し、いくつかの小片を追加することも検討しました (b2Vec2
クラス内のピクセルベースの測定用のゲッターなど)。
これは問題ありませんが、これがどのような悪影響を及ぼし、アプリケーションやゲームにどの程度影響するかについては 100% 確信が持てません。コンパイラが私の懸念の一部をある程度軽減するかどうか、または読みやすさと一貫性のために不要なクラスを追加するときに配慮する必要があるかどうかはわかりません。
私はいくつかの疑いがあります:
- 余分なレベルのクラス構造に対応するためのより多くのメモリ消費。
- 余分なレベルのメンバーを初期化することによる新しいオブジェクトの作成時のパフォーマンスへの影響?
ランタイムへの影響について具体的に質問しています。
actionscript-3 - JIT は dicenumber 変数を操作から保護しますか?
「モノポリー」というゲームに似た基本的なゲームを作っています。サイコロを転がし、サイコロが転がった場所の数 (1 ~ 6) を移動する必要があります。
コード例は次のようになります。
しかし、このコードが何らかの操作に対して十分に安全であるかどうかが心配です(たとえば、チートエンジンを使用してロール数を変更するなど)。私は実際に自分のゲームを「ハック」しようとしましたが、randRange 関数の数字を変更することに成功しただけなので、特定の数字またはより短い範囲の数字など、サイコロを振ることができます。しかし、これはプレイする前にしかできませんでした(ゲームのスタートボタンを押します)。値を再度変更しようとしたとき、何も変更されませんでした (まあ、私はあまりハッカーではありません...)。
少し調べてみたところ、Actionscript Virtual Machine の JIT コンパイラが、私のゲーム (SWF) を CPU で実行されるマシン コードにコンパイルするため、私の失敗の原因である可能性があることがわかりました。私が知る限り、JIT コンパイラは関数を最初に実行するまでコンパイルしませんが、一度コンパイルすると、その関数の SWF バイトコードは二度とアクセスされなくなります。
問題はこれです: Cheat Engine などのプログラムを使用して関数を呼び出した後に、サイコロの出目の数を変更する方法はありますか?
virtual-machine - Mozilla Tamarin のステータスは?
ウィキペディアは、Mozilla の下で Tamarin がアクティブであると主張していますが、mozilla labs プロジェクトの下にはまったくリストされておらず、MDN のすべてのドキュメントは「廃止」セクションにあるようです。プロジェクトはまだサポートされていますか?
actionscript-3 - メソッドを重複して実行できますか?
概要:
単一のスレッドで実行するときに、単一のメソッドを重複して 2 回実行できるかどうかを調べようとしています。または、2 つの異なるメソッドをオーバーラップして実行できる場合、特定の変数へのアクセスを共有すると、望ましくない動作が発生する可能性があります。
単一のメソッドの例:
質問:
1) イベント システムを使用して method1 が 20 ミリ秒ごとに起動され、メソッド全体の実行に 20 ミリ秒以上かかる場合、メソッドは重複して再度実行されますか?
2) シングル スレッド環境でメソッドをオーバーラップして実行できるシナリオは他にありますか?それとも、AVM2 は一度に 1 つのメソッドの実行に制限されていますか?
調査: https://www.adobe.com/content/dam/Adobe/en/devnet/actionscript/articles/avm2overview.pdfを読んだところ、AVM2 にはコードを実行するためのスタックがあり、その説明が記載されています。メソッドを使用すると、2 番目のスタックがない場合、スタック システムは一度に 1 つのメソッドしか実行できないように見えます。StackeOverflow の専門家に確認して確認したいと思います。
私は時間に敏感なデータを扱っており、メソッドが別のメソッドによって同時にアクセスされている変数を変更していないことを確認する必要があります。