0

長方形の幅を狭くするだけで、割り当てられた位置から長方形が移動するのに問題があるようです。私が取り組んでいるゲームは、ヒューズを使って爆発物をシミュレートします。クロックが0にカウントダウンすると、ヒューズのサイズが小さくなります。問題はローカル座標とグローバル座標に関係していると思いますが、問題を修正する方法がわかりません。ここにいくつかのコードがあります:

//fuse
_fuse = new Sprite();
_fuse.graphics.beginFill(0x000000);
_fuse.graphics.drawRect(630, 340, (_fuseCounter / _fuseWidth) * 120, 20);
_fuse.graphics.endFill();

そして、ここで私は各フレームの幅を減らします:

//decrease fuse to give the player a visual of urgency.
_fuseCounter--;         
_fuse.width = (_fuseCounter/ _fuseWidth) * 120;

私のコードのどこにもヒューズのx位置は変わりません。この1つの問題は別として、rectは私が望むとおりに機能します。この問題についての助けをいただければ幸いです。

4

1 に答える 1

1

問題は、長方形を630、340で描画してから、その周囲の幅を狭くしていることです。

このように考えてください

0                    100
-----------------------
|                     |
|          -----      |
|         |     |     |
|          -----      |
|                     |
|                     |
-----------------------

幅を狭くすると、基本的に外側のムービークリップの左端が右端に向かって引っ張られ、ネストされたコンテンツが拡大縮小されます。このような結果になります

0                  75  
-------------------
|                 |
|      ---        |
|     |   |       |  
|      ---        |
|                 |
|                 |
-------------------

したがって、これを回避するためにネストすることができます。新しいスプライトを_fuseに追加し、それをスケーリングします

var s:Sprite = new Sprite();
s.x =630;
s.y = 340
s.graphics.drawRect(0, 0, (_fuseCounter / _fuseWidth) * 120, 20);
fuse.addChild(s);

そして、s.widthをスケーリングします

ネストしたくない場合は、graphics.clear()を実行して、rectを新しい小さい幅に再描画することもできます。

于 2012-04-12T01:55:36.103 に答える