|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
Регистрация: Apr 2014
Сообщений: 215
|
удаление нескольких объектов одновременно с экрана
Здравствуйте, логика в игре следующая
1)Герой поднимает предметы в туре,в результате они попадают в некий массив текстовыми значениями (проверял через trace,нормально все), хоть по длине массива 2шт, хоть названия. 2)стоит уйти и зайти заново в эту комнату, удаляется только один из предметов ниже просто пример if(game== "тест") { for(var i:Number = 0;i<excess.length;i++) { if(excess[i] == "предмет1") { //удаляем предмет 1 } if(excess[i] == "предмет2" ) { //удаляем предмет 2 } } } как я понял это происходит из за того что компилятор не знает что ему именно удалить.Если использовать разные переменные что то в духе то все нормально, но это сколько нужно переменных, если допустим в туре туча предметов, хотя я планирую пока 3 -6 предметов от силы делать, все равно как то топорно делать каждому переменную, может кто поделится мыслями как можно поступить, буду признателен примерам Последний раз редактировалось delphic; 03.08.2014 в 00:00. |
|
|||||
Компилятор тут ни при чем. Все это происходит не во время компиляции, а во время работы приложения.
Отсюда можно сделать вывод, что у вас путаница понятий, поэтому хотелось бы знать, что вы имеете в виду под удалением предмета? В этих примерах нет удаления
__________________
Ко мне можно и нужно обращаться на ты) |
|
|||||
Регистрация: Jan 2013
Сообщений: 322
|
if(game == "тест") { for(var i:uint = 0; i < excess.length; i++) { switch(excess[i]){ case "предмет1": /*удаляешь*/; i--; break; case "предмет2": /*удаляешь*/; i--; break; } } } просто делаешь i-- до новой итерации. плюс константы "предмет1" и "предмет2" записываешь в массив: var items:Vector.<String> = new <String>["предмет1", "предмет2"]; if(game == "тест") { for(var i:uint = 0; i < excess.length; i++) { if(items.indexOf(excess[i]) !== -1) { excess.splice(i, 1); i--; } } } как я понял items - то, что герой уже поднял, а excess - то, что нужно поднять Последний раз редактировалось nubideus; 02.08.2014 в 21:03. |
|
|||||
nubideus, да у него там похоже не в массиве дело. Как я понял в массив добавляются те предметы, которые нужно с дисплей листа снести, а удаляется потом только один
__________________
Ко мне можно и нужно обращаться на ты) |
|
|||||
Регистрация: Apr 2014
Сообщений: 215
|
да,совершенно верно, удаляю с экрана,если например герой поднял предмет он идет в массив, а потом в условии если тур такой то, если в массиве есть предмет, убираем с экрана, а убирается тока один. Извиняюсь что не уточнил откуда удалить
|
|
|||||
Регистрация: Jun 2008
Сообщений: 126
|
Как и nubideus думаю дело в том, что excess.length меняется когда ты удаляешь элемент из массива, поэтому цикл for не проходит все элементы.
|
|
|||||
надо идти задом наперёд, иначе при удалении будут проскакивать следующие индексы
(можно конечно делать i-- при удалении, но это менее гуманоидно) for(var i:Number = excess.length-1;i >= 0;i--) { if(excess[i] == "предмет1") { //удаляем предмет 1 } if(excess[i] == "предмет2" ) { //удаляем предмет 2 } } |
|
|||||
Регистрация: Apr 2014
Сообщений: 215
|
Цитата:
я просто в теме неправильно выразился, у меня вообще нет удаление, я просто убираю элемент с экрана |
|
|||||
Регистрация: Jun 2008
Сообщений: 126
|
Нужно больше информации. Вот этот пример работает.
package { import flash.display.Bitmap; import flash.display.BitmapData; import flash.display.DisplayObject; import flash.display.Sprite; import flash.events.Event; public class Main extends Sprite { public function Main():void { var excess:Array = ["предмет1", "предмет2"]; var apple:Bitmap = new Bitmap(new BitmapData(100, 100, false, 0xff0000)); var orange:Bitmap = new Bitmap(new BitmapData(100, 100, false, 0x00ff00)); var banana:Bitmap = new Bitmap(new BitmapData(100, 100, false, 0x0000ff)); addChild(apple); addChild(orange); addChild(banana); for (var i:Number = 0; i < excess.length; i++) { if (excess[i] == "предмет1") { removeChild(orange); } if (excess[i] == "предмет2" ) { removeChild(banana); } } } } } |
|
|||||
Регистрация: Apr 2014
Сообщений: 215
|
это сработает как и мой код, если пройти героем,но стоит вернутся в тур где это брали, убирается тока один из предметов, а должны убираться два
вообщем нужно сделать так - собираем героем предметы, выходим в другой тур, возвращаемся в тур где подобрали предметы и их не должно уже там быть, да взять хотя бы пример марио, вы собираете копейки, а когда вы ворачиваетесь назад их уже нет, и это правильно,ведь вы уже их собрали.Да по факту, когда мы трогаем героем предмет он убирается, массив срабатывает, но стоит вам вернуться уберется тока один предмет |
Часовой пояс GMT +4, время: 02:31. |
|
« Предыдущая тема | Следующая тема » |
|
|