У мене є дивна проблема, що, можливо, хтось маєтакож досвідчений. Використовуючи функцію ActionScript 3 та функцію drawRect (), щоб створити відеоролик під час запуску, я відчуваю деякий мерехтіння, коли намагаюся використовувати математику, щоб визначити позицію, в якій вона втягується.
Наступний код створює хороший, твердий прямокутник без проблем:
var mc:MovieClip = new MovieClip();
mc.graphics.beginFill(0xFF1230);
mc.graphics.drawRect(mouseX, mouseY, 100, 80);
mc.graphics.endFill();
Однак, коли я починаю намагатися налаштовувати, де прямокутник намальований, на зразок цього:
mc.graphics.drawRect(mouseX - 50, mouseY - 50, 100, 80);
прямокутник нарисується, але буде постійно мерехтіти.
Я спробував багато варіантів лінії, яка дає помилку, пробравши різні типи даних і відокремлюючи математику від власної змінної, але те ж саме відбувається.
Хто-небудь колись зазнав щось подібне раніше? Будь-яка допомога або інформація дуже цінуються!
Відповіді:
1 для відповіді № 1швидше за все, виникає проблема з програмою для встановлення події, ніж код малюнка. Я думаю, що ви використовуєте
MouseEvent
. Вам потрібно буде опублікувати цей код для тих, хто допоможе вам з цим (швидше за все, миша миша змінюється, як тільки ви малюєте прямокутник внизу)вам не потрібно буде перефарбовувати графіку,ви збираєтеся дізнатись, що це вплине на частоту кадрів з плином часу, якщо ви не очистите його () кожного разу. Вам краще зрівняти прямокутник і перемістити позицію кліпу.
подобається це:
var mc:MovieClip = new MovieClip();
mc.graphics.beginFill(0xFF1230);
mc.graphics.drawRect(-50, -50, 100, 80);
mc.graphics.endFill();
addChild(mc);
stage.addEventListener(MouseEvent.MOUSE_MOVE, onMove);
function onMove(e:MouseEvent):void {
mc.x = mouseX;
mc.y = mouseY;
}
0 для відповіді № 2
Замість перетворення прямокутника на кожну рамку ви можете просто масштабувати його.
var mc:MovieClip = new MovieClip();
mc.graphics.beginFill(0xFF1230);
mc.graphics.drawRect(0,0,1,1);
mc.graphics.endFill();
addChild(mc);
stage.addEventListener(Event.ENTER_FRAME, loop);
function loop(e:Event) {
mc.scaleX = mouseX;
mc.scaleY = mouseY;
}