2013-05-27 22 views
0

嘿,大家好,我在尝试弄清楚如何做到这一点时遇到了一些麻烦。我有一个名为mcGoal_1的影片剪辑对象,并且在它的类中,我使用TweenLite在舞台上垂下舞台。在Level_1它从底部开始,但是当level_2开始时,我希望它从顶部开始,但无法弄清楚如何更改每个级别的值来完成此操作。下面是我使用的代码能够在底部开始:更改每个级别相同的影片剪辑对象的变量

private function init():void 
    { 
     TweenMax.to(this, 4, { y:40, repeat: -1, yoyo:true, ease:Power0.easeInOut }); 
     TweenLite.from(this, 2, {autoAlpha:0});  
    } 

在我的引擎类,然后我有它使用这段代码添加到舞台:

mcGoal_1 = new goal_1(); 
stage.addChild(mcGoal_1); 
mcGoal_1.x = (stage.stageWidth/2) + 350; 
mcGoal_1.y = (stage.stageHeight) - 35; 

所以一切工作只是很好,但我想要完成的是在每个新级别开始时改变mcGoal_1的位置。因此,在LEVEL_2我希望我的mcGoal_1位置从顶部开始,而不是这里的底部是代码为它在顶部开始:

mcGoal_1类:

private function init():void 
    { 

     TweenMax.to(this, 2.8, { y:445, repeat: -1, yoyo:true, ease:Power0.easeInOut }); 
     TweenLite.from(this, 2, {delay:2,autoAlpha:0}); 

    } 
在引擎类

然后:

mcGoal_1 = new goal_1(); 
     mcGoal_1.x = (stage.stageWidth/2) + 350; 
     mcGoal_1.y = (stage.stageHeight) - 445; 

所以现在它从头开始。

我现在正在做这件事是即时创建多个mcGoals。我有一个新的目标,每个级别,所以现在我有一个10回合目标影片剪辑。但是我认为如果我可以在每个新层次上改变mcGoal_1的价值,而不是创建一个全新的影片剪辑,只是从顶部而不是底部开始,那将会容易得多。我在想,也许我需要创建2个独立的函数。1函数用于当它在舞台的顶部开始,另一个用于舞台的底部时。所以我会从我的mcGoal_1类中取出补间,并将它们添加到引擎类,以便我可以更改值正确?

像这样的事情也许在引擎类:

Private Function startAtTop():void 
    { 
    mcGoal_1 = new goal_1(); 
     stage.addChild(mcGoal_1); 
     mcGoal_1.x = (stage.stageWidth/2) + 350; 
     mcGoal_1.y = (stage.stageHeight) - 35; 

    TweenMax.to(mcGoal_1, 4, { y:40, repeat: -1, yoyo:true, ease:Power0.easeInOut }); 

    } 




Private Function startAtBottom():void 
{ 
    mcGoal_1 = new goal_1(); 
     mcGoal_1.x = (stage.stageWidth/2) + 350; 
     mcGoal_1.y = (stage.stageHeight) - 445; 

TweenMax.to(mcGoal_1, 2.8, { y:445, repeat: -1, yoyo:true, ease:Power0.easeInOut }); 

} 

那么我会只是调用每个新的水平为准功能。这虽然很有效,但是因为每秒每秒都会调用函数,导致TweenLite无法正常工作。

请任何帮助,将不胜感激!

回答

1

就我所见,您只需要一个类。你有一个init方法。您应该为init方法提供正确设置自身所需的信息。

目标:

private function init(startPosition:Point, endPosition:Point):void 
{ 
    this.x = startPosition.x; 
    this.y = startPosition.y; 
    TweenMax.to(this, 4, { y:endPosition.y, repeat: -1, yoyo:true, ease:Power0.easeInOut }); 
    //you could use endPosition.x for a tween here as well 
    TweenLite.from(this, 2, {autoAlpha:0});  
} 

LevelConfig类:

package{ 
import flash.geom.Point; 

public class LevelConfig { 

    private var _startPosition:Point; 
    private var _endPosition:Point; 

    //add more properties 

    public function LevelConfig(startPosition:Point, endPosition:Point) { 
     this._startPosition = startPosition; 
     this._endPosition = endPosition; 
    } 

    public function get endPosition():Point { 
     return _endPosition; 
    } 

    public function set endPosition(value:Point):void { 
     _endPosition = value; 
    } 
} 
} 

引擎:

function initLevels():void 
{ 
    levels = new Vector.<LevelConfig>(); 
    levels.push(new LevelConfig(new Point((stage.stageWidth/2) + 350,(stage.stageHeight) - 445),new Point((stage.stageWidth/2) + 350,445)); 

    levels.push(new LevelConfig(new Point((stage.stageWidth/2) + 350, 445),new Point((stage.stageWidth/2) + 350,(stage.stageHeight) - 445)); 

    //add more levels 
} 

var levels:Vector.<LevelConfig>; 
initLevels(); 

function startLevel(level:int):void 
{ 
    var mcGoal:Goal = new Goal(); 
    var config:LevelConfig = levels[level]; 

    mcGoal.init(config.startPoint,config.endPoint); 
} 

那么你可以开始与呼叫startLevel(levelIndex) 你通常会装载高度的高度来自外部的配置。 XML或JSON 请注意,levelIndex以0开头!所以你的等级1是0.你也可以添加等级名称,描述和这个模型到底是什么。

+0

有趣。所以你分配点变量。但即时通讯仍然有点与代码混淆。我不知道它将如何改变它开始时每个新层次的起始位置。 – Nathan

+0

看到我的补充。你必须为你的关卡构建某种配置。用方法来列出一个项目的所有可能的位置是不实际的。 – Larusso