Имам странен проблем, който може би има някойсъщо опитен. Докато използваме 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;
}