我在Actionscript 3(Flash CS5)中創建了一個程序,當您點擊時產生一個雞蛋(現在的圓圈)離開舞臺,然後發送雞蛋到你點擊(編碼)補間的地方。另外,它會縮放它以嘗試渲染3D的幻覺。雖然座標正確,但對象沒有添加到正確的位置
我將一個TweenEvent.MOTION_FINISH添加到蛋的其中一個補間,以檢查動作何時完成。當它發生時,我創建一個與原始鼠標點擊具有相同座標的新對象(稱爲Splat)。
問題1: Splat對象未被添加到正確的位置,如下圖所示。我檢查座標,並且它們在Egg類和Splash類中都匹配。我也確保兩個對象的註冊點位於它們中間。最後,我檢查了是否是造成問題的規模,但即使刪除縮放補間,我也遇到同樣的問題。
(編輯:。將雞蛋放置在正確的位置爲鼠標點擊的原始座標,因爲它們應該是它只是似乎被移位的明星對象)
http://i45.tinypic.com/24bj1h3.png
問題2: Splat對象與雞蛋對象的縮小量相同。爲什麼是這樣?我沒有(打算)使飛濺依賴於蛋。
這裏是相關的代碼:
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);
}
}
}
更新: 我創建了一個自定義的SplatEvent和有我的主類聽它。偶是在MOTION_FINISHED處理程序中分派的。有用!
雖然,我不得不通過在主類中使用公共靜態變量來傳回蛋着陸的原始座標。像這樣在主類:
public static var splatX:int;
public static var splatY:int;
而且這樣的蛋類:
eggMain.splatX = mX;
eggMain.splatY = mY;
我可以住在一起,但我寧願不使用全局變量。就此提出建議,但主要問題已得到解答。謝謝。
謝謝你,我會研究自定義事件並嘗試你的方法。儘管如此,這是如何解釋恆星爲什麼會流離失所的呢?哪些繼承的座標和變換應該取代恆星? – lcaaroe
查看更新後的帖子。希望這次我更好地解釋它。 –
我創建了一個自定義的SplatEvent,讓我的主類監聽它。偶是在MOTION_FINISHED處理程序中分派的。有用! – lcaaroe