2013-05-27 3 views
0

Эй, ребята, поэтому у меня есть небольшая проблема, пытаясь понять, как это сделать. У меня есть объект Movie Clip с именем mcGoal_1, и в его классе у меня есть анимация вверх и вниз по вертикали, используя TweenLite. На Level_1 он начинается в нижней части, но когда начат level_2, я хочу, чтобы он начинался сверху, но не мог понять, как изменить значения каждого уровня для достижения этого. Вот код, я использую для него, чтобы начать в нижней части:Изменение переменных для одного и того же объекта Movie Clip для каждого уровня

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 положение, чтобы начать сверху, а не снизу здесь код для того, чтобы начать в Top:

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 клипов MovieClips. Но я думал, что было бы намного проще, если бы я мог просто изменить значение mcGoal_1 на каждом новом уровне вместо того, чтобы создавать совершенно новый видеоклип, чтобы начать сверху, а не снизу. Я думал, что, может быть, мне нужно просто создать две отдельные функции. 1 функция - когда она начинается в верхней части сцены, а другая для нижней части сцены. Поэтому я бы взял Tweens из моего класса mcGoal_1 и добавил их в класс Engine, чтобы я мог правильно изменить значения?

Что-то вроде этого, может быть, в классе двигателей:

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

Интересно. Таким образом, вы назначаете точечные переменные. Но я все еще немного смущен кодом. Я не могу понять, как он изменит свою стартовую позицию для каждого нового уровня tht запуска. – Nathan

+0

см. Мои дополнения. Вы должны построить какую-то конфигурацию для своего уровня. Нецелесообразно выкладывать все возможные позиции одного предмета с помощью методов. – Larusso

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