Я создал программу в ActionScript 3 (Flash CS5), которая выдает яйцо (круг на данный момент) со сцены, когда вы нажимаете, а затем отправляет яйцо где вы нажали с помощью (закодированной) анимации. Кроме того, он масштабирует его, пытаясь создать иллюзию 3D.Объект не добавлен в нужное место, несмотря на правильные координаты.
Я добавляю TweenEvent.MOTION_FINISH к одному из подростков для яйца, чтобы проверить, закончится ли движение. Когда это произойдет, я создаю новый объект (называемый Splat) с теми же координатами, что и исходный щелчок мышью.
Задача 1: Объект Splat не отображается в нужном месте, как показано на рисунке ниже. Я проверяю координаты, и они соответствуют как классу Egg, так и классу Splash. Я также удостоверился, что точка регистрации для обоих объектов находится посреди них. Наконец, я проверил, была ли проблема с масштабом, но у меня такая же проблема, даже если я удаляю масштабные твины.
(EDIT:... Яйцо находится в нужном месте Исходные координаты для мыши являются, как они должны быть это только звезды объекты, которые кажутся смещаться)
http://i45.tinypic.com/24bj1h3.png
Задача 2: Объект Splat уменьшает то же количество, что и объект Egg. Почему это? Я не (должен) сделать Splash зависимым от Яйца.
А вот соответствующий код:
package
{
import flash.display.MovieClip;
import flash.utils.Timer;
import flash.events.MouseEvent;
public class eggMain extends MovieClip
{
import flash.events.Event;
public function eggMain()
{
stage.addEventListener(MouseEvent.CLICK, spawn);
}
function spawn(event)
{
for(var i:int = 0; i<1; i++)
{
trace("mX in main class = " + mouseX);
trace("mY in main class = " + mouseY);
var e:Egg = new Egg(mouseX, mouseY);
addChild(e);
}
}
}
}
package
{
import flash.display.MovieClip;
import fl.transitions.Tween;
import fl.transitions.easing.*;
import fl.transitions.TweenEvent;
public class Egg extends MovieClip
{
var stageWidth:int = 550;
var stageHeight:int = 400;
var buffer:int = 100;
var mX = 0;
var mY = 0;
public function Egg(moX:int, moY:int) //mouseX, mouseY
{
mX = moX;
mY = moY;
trace("mX in Egg constructor: " + mX);
trace("mY in Egg constructor: " + mY);
spawnAtFixedPoint();
animate();
}
function spawnAtFixedPoint()
{
this.x = stageWidth + buffer;
this.y = stageHeight - buffer;
}
//Moves the egg in from the spawn point using tweens. Scales down on the way to give 3D illusion.
function animate()
{
var xMovement:Tween;
var yMovement:Tween;
var xScale:Tween;
var yScale:Tween;
trace("mX in animate() = " + mX);
trace("mY in animate() = " + mY);
xMovement = new Tween(this, "x", Regular.easeOut, this.x, mX, 1, true); //obj, property, ease function, start, time, in seconds (true)
yMovement = new Tween(this, "y", Regular.easeOut, this.y, mY, 1, true);
xScale = new Tween(this, "scaleX", Regular.easeIn, 1, 0.1, 1, true);
yScale = new Tween(this, "scaleY", Regular.easeIn, 1, 0.1, 1, true);
//Checks when the object has finished animating (which mean the egg has landed)
xMovement.addEventListener(TweenEvent.MOTION_FINISH, splat);
}
//Spawns a splat (currently a star) at the same coordinates as the egg
function splat(event)
{
trace("mX in splat() = " + mX);
trace("mY in splat() = " + mY);
var s = new Splat(mX, mY);
addChild(s);
}
}
}
Update: Я создал пользовательский SplatEvent и был мой основной класс слушать его. Четный отправляется в обработчике MOTION_FINISHED. Оно работает!
Хотя, мне пришлось заставить его работать, используя публичные статические вары в основном классе для передачи исходных координат посадки Яйца. Как и в главном классе:
public static var splatX:int;
public static var splatY:int;
И как это в классе Egg:
eggMain.splatX = mX;
eggMain.splatY = mY;
Я могу жить с этим, но я предпочел бы не использовать глобальные переменные. Принимая на это предложения, хотя на главный вопрос отвечает. Благодарю.
Спасибо, я рассмотрю пользовательские события и попробую ваш метод. Хотя, как это объясняет, почему звезда смещена? Какие унаследованные координаты и преобразования должны смещать звезду? – lcaaroe
См. Обновленное сообщение. Надеюсь, на этот раз я объяснил это лучше. –
Я создал пользовательский SplatEvent, и мой основной класс слушал его.Четный отправляется в обработчике MOTION_FINISHED. Оно работает! – lcaaroe