2012-05-05 8 views
1

Я создал программу в 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; 

Я могу жить с этим, но я предпочел бы не использовать глобальные переменные. Принимая на это предложения, хотя на главный вопрос отвечает. Благодарю.

ответ

1

Вы создаете знак в экземпляре яйца, а затем добавляете его в список отображения яйца. Это означает, что знак (звезда) создается в координатном пространстве яйца и поэтому компенсируется положением яйца на сцене. Это также означает, что splat наследует любые преобразования, сделанные вами в яйце, такие как масштаб, поскольку он является дочерним элементом экземпляра преобразованного яйца.

Лучшим подходом было бы прослушивание в вашем основном классе для события завершения движения вашего яйца (посмотрите на пузырь событий) или пользовательского события, снятого с обработчика завершения движения. Когда это событие получено, создайте экземпляр splat и добавьте его в список отображения основного класса.

+0

Спасибо, я рассмотрю пользовательские события и попробую ваш метод. Хотя, как это объясняет, почему звезда смещена? Какие унаследованные координаты и преобразования должны смещать звезду? – lcaaroe

+0

См. Обновленное сообщение. Надеюсь, на этот раз я объяснил это лучше. –

+0

Я создал пользовательский SplatEvent, и мой основной класс слушал его.Четный отправляется в обработчике MOTION_FINISHED. Оно работает! – lcaaroe

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

  • Нет связанных вопросов^_^