클릭하여 스테이지를 벗어난 에그 (현재는 원)를 생성하는 Actionscript 3 (Flash CS5) 프로그램을 생성 한 다음 에그를 보냅니다 (코드화 된) 트윈을 클릭 한 위치까지 또한 3D의 환상을주기 위해 크기를 조정합니다.올바른 좌표에도 불구하고 객체가 올바른 위치에 추가되지 않았습니다.
에그의 트윈 중 하나에 TweenEvent.MOTION_FINISH를 추가하여 모션이 완료되었는지 확인합니다. 그럴 때 원래의 마우스 클릭과 동일한 좌표로 새 오브젝트 (Splat)를 만듭니다.
문제 1 : 아래 그림과 같이 Splat 개체가 올바른 위치에 추가되지 않았습니다. 좌표를 확인하면 Egg 클래스와 Splash 클래스에서 일치합니다. 또한 두 개체의 등록 지점이 중간에 있는지 확인했습니다. 마지막으로 문제를 만든 척도인지 확인했지만 척도 트윈을 제거해도 같은 문제가 발생합니다.
(편집 :... 에그가 정확한 지점에 위치 그들이해야대로 마우스 클릭에 대한 원래의 좌표는 그것은 난민 것 같다 만 스타 객체이다)는
http://i45.tinypic.com/24bj1h3.png
문제 2 : Splat 개체는 Egg 개체와 동일한 크기로 축소됩니다. 왜 이런거야? 나는 달걀에 의존하는 스플래시를 만들려하지 않았다.
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을 만들어 내 주요 클래스가 수신했다. even도 MOTION_FINISHED 핸들러에서 전달됩니다. 그것은 작동합니다!에그 랜딩의 원래 좌표를 다시 전달하기 위해 메인 클래스의 public static vars를 사용하여 작업해야했습니다. 마찬가지로 메인 클래스에서 너무 :
public static var splatX:int;
public static var splatY:int;
그리고 계란 클래스에서이 같은
:eggMain.splatX = mX;
eggMain.splatY = mY;
내가 살 수 있지만 글로벌 변수를 사용하지 않으려는 것입니다. 주된 질문에 답을 얻었지만 이에 대한 제안을했습니다. 감사.
고맙습니다. 맞춤 이벤트를 살펴보고 방법을 시도해 보겠습니다. 그렇다고해서 별이 어떻게 옮겨 졌는지를 어떻게 설명 할 수 있습니까? 어떤 계승 된 좌표와 변형이 별을 대체해야합니까? – lcaaroe
업데이트 된 게시물보기. 잘하면이 시간을 더 잘 설명해 주었으면합니다. –
커스텀 SplatEvent를 생성하고 메인 클래스가 그것을 듣도록했습니다.even도 MOTION_FINISHED 핸들러에서 전달됩니다. 그것은 작동합니다! – lcaaroe