2012-04-12 4 views
0

Кажется, что у меня возникают проблемы с перемещением прямоугольников из их назначенных позиций, когда все, что я хочу сделать, это уменьшить их ширину. Игра, в которой я работаю, имитирует взрывчатку с предохранителем. Плавкий предохранитель уменьшается в размере, так как число часов уменьшается до 0. Я думаю, что проблема связана с локальными координатами и глобальными коордами, но я не уверен, как исправить проблему. Вот код:Как предотвратить перемещение Rect из своего положения при уменьшении ширины

//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; 

Нигде в моем код делает й позицию смены предохранителя. Помимо этой одной проблемы, прямой работает именно так, как я этого хочу. Любая помощь в этом вопросе приветствуется.

+1

Изменение размера экранного объекта изменит размер на основе точки регистрации вашего прямоугольника. Если вы хотите изменить размер слева направо, установите точку регистрации слева от графики (поместите '0' в третий аргумент' drawRect() '). – Marty

+0

@ Марти Уоллес это не совсем решило проблему, но я узнал кое-что критическое о том, как спрайты действительно нарисованы. Благодаря! – King

ответ

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() и перерисовать прямоугольник на новая, меньшая ширина

+0

У меня не было большого успеха с добавлением нового спрайта, но перерисовка исходного прямоугольника сделала трюк. Благодаря! – King

Смежные вопросы