2015-08-20 3 views
0

У меня есть несколько переменных, которые имеют одинаковый эффект и не нуждаются в повторном написании 5 раз.as3 - Как вы можете объединить переменные в одну переменную?

Как я могу объединить все эти переменные в один?

Скажем, у меня есть block0, block1, block3

Я хочу, чтобы они все то же самое, когда он должен так, чтобы путь мне не нужно писать это несколько раз?

Например:

if hittest wall 
{ 
block0.x -= 5; 
block1.x -= 5; 
block2.x -= 5; 
} 

Что я хотел бы:

if hittest wall 
{ 
blocksack.x -= 5; 
} 
+0

достаточно не информации, чтобы ответить.Это зависит от того, к чему относятся эти переменные, к чему они предназначены, и т. Д. – BotMaster

ответ

1

Похоже, все эти DisplayObject s.

Для группы DisplayObject с, добавить их к DisplayObjectContainer:

var blockContainer:Sprite = new Sprite(); 
blockContainer.addChild(block0); 
blockContainer.addChild(block1); 
blockContainer.addChild(block2); 
addChild(blockContainer); 

Теперь вы можете переместить их все перемещения контейнера:

blockContainer.x -= 5; 

Там другая проблема с вашим кодом. Похоже, вы используете имена переменных с номерами в конце, чтобы отличить их. Это плохая практика.

  • Нужно давать десятки объектов индивидуальным именам, если вы никогда не нуждаетесь в взаимодействии с ними по отдельности.
  • Он также подвержен ошибкам и негибким. Если вы хотите добавить больше блоков, , то какое последнее число вы использовали, чтобы вы не использовали число в два раза? Что делать, если вы хотите удалить первые 3 блока по 20, переименуете ли вы остальное, чтобы начать с 0?

Наличие всех этих переменных является вашей реальной проблемой.

Их следует сгруппировать с самого начала. Поскольку вы, по-видимому, размещаете блоки вручную, простым решением этого является использование контейнера.

Поместите все блоки в пустой контейнер, не указывая им имена экземпляров. Затем используйте методы этого DisplayObjectContainer, а именно numChildren и getChildAt(), чтобы поместить всех своих детей в массив. Затем вы можете перебирать массив, чтобы применить какое-либо действие ко всем его элементам, если хотите, но опять же, для изменения свойства .x его должно быть достаточно, чтобы просто переместить контейнер.

+0

В моем комментарии не было ничего плохого, вы удаляете чистую цензуру. Вы против свободы выражения? – BotMaster

+0

@BotMaster Я не могу удалить комментарии. – null

+0

Тот, кто это сделал, не понимает этот вопрос и просто как цензура. – BotMaster

0

Вы можете написать отдельную функцию, чем перемещение для каждого объекта. Например

private function moveAllBlocks(dist:Number):void { 
    block0.x -= dist; 
    block1.x -= dist; 
    block2.x -= dist; 
} 

Тогда вы можете просто вызвать функцию из любого места вы хотите по телефону

moveAllBlocks(5);