2015-05-14 3 views
0

У меня есть массив случайно созданных предметов коллекционирования. Когда они сталкиваются с игроком, они удаляются со сцены, а счет увеличивается на scoreValue. Я хочу, чтобы каждый коллекционер в массиве имел другую оценку, но я не смог его получить. Ниже приведен весь мой последний код, относящийся к этому.Коллекционирование с различными значениями оценки

public class Main_EnemySpawnTest_3 extends MovieClip 
{ 
    // variables 
    var player:Player = new Player; 
    var collectables:Array = [Collectable1, Collectable2, Collectable3]; 
    var collectablesRandomNumber:int = Math.random() * (collectables.length); 
    var collectable = new collectables[collectablesRandomNumber]; 
    var score:uint = 0; 

    // constructor function 
    public function Main_EnemySpawnTest_3():void 
    { 
     // listeners 
     addEventListener(Event.ENTER_FRAME, checkEveryFrame); 
     spawnCollectablesButton.addEventListener(MouseEvent.CLICK, spawnCollectablesClick); 
    } 

    // enter frame, check every frame 
    public function checkEveryFrame(event:Event):void 
    { 
     // score 
     messageDisplay.text = String (score); 
    } 

    // hit test 
    function hitTest (event:Event):void 
    { 
     // hit test with collectables 
     if (collectable.hitTestObject (player) == true) 
     { 
      var scoreValue:uint; 

      if (stage.contains (collectable)) 
      { 
       if (collectables[0]) 
       { 
        scoreValue = 100; 
       } 
       else if (collectables[1]) 
       { 
        scoreValue = 300; 
       } 
       else if (collectables[2]) 
       { 
        scoreValue = 700; 
       } 
       removeChild (collectable); 
       score = score + scoreValue; 
      } 
     } 
    } 
} 

В настоящий момент предметы коллекционирования порождаются одним нажатием кнопки. Код для этого ниже, если это помогает.

// collectable spawn button 
function spawnCollectablesClick (event:MouseEvent):void 
{ 
    var oldCollectable = collectable; 
    if (stage.contains (oldCollectable)) 
    { 
     removeChild (oldCollectable); 
    }  
var collectablePositionRandomNumber:int = Math.random() * 3; 
    var collectablePositionX:int = stage.width - (collectable.width * -0.5); 
    collectable = new collectables[Math.floor(Math.random() * collectables.length)]; 
    collectable.x = collectablePositionX; 
    globalSpeed = 5; 
    if (collectablePositionRandomNumber == 0) 
    { 
     collectable.y = topPosition; 
    } 
    else if (collectablePositionRandomNumber == 1) 
    { 
     collectable.y = centerPosition; 
    } 
    else if (collectablePositionRandomNumber == 2) 
    { 
     collectable.y = bottomPosition; 
    } 
    addChild (collectable); 
    trace (collectable); 
} 
+0

Как вы создаете/создаете свои коллекционные предметы? Позвольте мне угадать, ваш счет всегда увеличивается на 100? Когда вы делаете 'if (collectables [0])', он просто ищет правдивое значение. Таким образом, пока результат 'collectables [0]' не равен null/false/undefined/negative number, он будет оцениваться как истинный. Поскольку у вас есть то, что предположительно является объектом в 'collectables [0]', условие всегда будет истинным. – BadFeelingAboutThis

+0

На данный момент я работаю над этим кодом, и в нем собираются предметы коллекционирования с нажатием кнопки. В конце концов, это будет таймер, массив на основе плитки или что-то еще. Я положу код в исходное сообщение – crabdog62482

+0

Collectable1, 2 и 3 из массива collectables. Каждый из них представляет собой свой коллекционный предмет (прямо сейчас, разные цветные и формованные монеты). Мне нужно, чтобы они награждали разные оценки, когда они сталкивались с игроком. Сейчас код работает, но он всегда набирает только 100 очков. Мне нужно каждое столкновение монет, чтобы дать его правильное значение точки, поэтому 100 для Collectable1, 300 для Collectable2 и 700 для Collectable3. – crabdog62482

ответ

0

Проблема исходит из if (collectables[0]): Это возвращает истину, пока collectables[0] не false/null/0/NaN или undefined. Таким образом, вы всегда будете добавлять 100, а else if s всегда будут пропущены.

Вы можете дать коллекционируемый свое собственное значение балла при его создании в spawnCollectablesClick:

collectable.scoreValue = ... 

Затем использовать это, чтобы увеличить счет

function hitTest (event:Event):void 
{ 
    // hit test with collectables 
    if (collectable.hitTestObject (player) == true) 
    { 
     score = score + collectable.scoreValue; 
     removeChild (collectable); 
    } 
} 

Как примечание стороны, если Collectible1, Collectible2, и Collectible3 - все разные классы, вы побеждаете цель занятий. Если 3 вещи имеют одно и то же поведение, но разные значения для вещей, все они могут быть экземплярами одного и того же класса с разными значениями переменных-членов.

+0

Эй, почему я не подумал об этом последнем редактировании! – BadFeelingAboutThis

+0

Я программировал только несколько месяцев, поэтому я не уверен, как делать то, что вы предлагаете. У меня был код точно, как вы его записали раньше, но это не решает проблему. Кроме того, я использую только один класс. Мне не повезло с несколькими классами, и даже если я смогу заставить их работать, это просто огромная проблема и сделать кодирование сложнее и беспорядочно, а не меньше. – crabdog62482

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