Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 19.12.2014, 12:52
hellopaso вне форума Посмотреть профиль Отправить личное сообщение для hellopaso Найти все сообщения от hellopaso
  № 1  
Ответить с цитированием
hellopaso

Регистрация: Aug 2011
Сообщений: 28
По умолчанию сравнение Object с INT - Object to string

привет!

у меня игра в стиле Math-3
Код AS3:
private var array:Array = [];
		private static const EMPTY_FIELD:int = 0;
 
		private function createArray():void {
 
			const COLS:int = 10;
			const ROWS:int = 10;
 
			for (var i:int = 0; i < COLS; i++){
 
				array[i] = [];
 
				for (var l:int = 0; l < ROWS; l++){
 
					array[i][l] = Math.random() > .5 ? EMPTY_FIELD  : new SomeObject();
 
 
				}
 
			}
 
			private function check():void {
 
				for (var i:int = 0; i < COLS; i++){
 
					for (var l:int = 0; l < ROWS; l++){
 
						if (array[i][l] == EMPTY_FIELD){ // этот фрагмент вызывает Object.toString()
 
							trace("empty!");
						}
 
						else {
 
							trace("object!")
 
						}
					}
				}
			}
		}
я вызываю check() очень часто так что получается много объектов Strng.

как этого избежать?

Старый 19.12.2014, 13:10
in4core вне форума Посмотреть профиль Отправить личное сообщение для in4core Найти все сообщения от in4core
  № 2  
Ответить с цитированием
in4core
[+4 06.05.14]
 
Аватар для in4core

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
Хотел дать отверт по решению через IndexOf. Но посмотрев внимательно, не понял, для чего вообще вызывается функция чек ? Когда она вызывается, при нажатии на кнопку или при нажатии на элемент... неясно
__________________
Марк Tween

Старый 19.12.2014, 13:14
hellopaso вне форума Посмотреть профиль Отправить личное сообщение для hellopaso Найти все сообщения от hellopaso
  № 3  
Ответить с цитированием
hellopaso

Регистрация: Aug 2011
Сообщений: 28
Код AS3:
addEventListener(Event.ENTER_FRAME, loop);
 
 
private function loop(e:Event):void {
 
check();
 
}
то есть вызывается чтобы проверить есть свободное место (EMPTY) или нет (Object)

Старый 19.12.2014, 13:22
in4core вне форума Посмотреть профиль Отправить личное сообщение для in4core Найти все сообщения от in4core
  № 4  
Ответить с цитированием
in4core
[+4 06.05.14]
 
Аватар для in4core

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
зачем в интер_фрейме то чекать? Я так понимаю в состоянии стояния все равно ничего не происходит. Чекать после действий. И 1 раз наверное.
Ну а вообще так, как я и сказал
Код AS3:
if(array.indexOf(EMPTY) != "-1") trace("object")
Добавлено через 1 минуту
P.s. да и я бы избавился от [i][l] вообще. Двумерный массив можно держать в голове, как говорится - для себя представляя его одномерным, так проще понимать
__________________
Марк Tween

Старый 19.12.2014, 14:20
samana вне форума Посмотреть профиль Отправить личное сообщение для samana Найти все сообщения от samana
  № 5  
Ответить с цитированием
samana
 
Аватар для samana

блогер
Регистрация: Mar 2008
Адрес: Днепропетровск
Сообщений: 1,783
Записей в блоге: 3
Цитата:
Сообщение от hellopaso Посмотреть сообщение
я вызываю check() очень часто так что получается много объектов Strng.
Вы ведь в методе check пробегаетесь по всему массиву, а пустых элементов в нём действительно может быть довольно много, ведь вы сами задали условие 50/50
Код AS3:
array[i][l] = Math.random() > .5 ? EMPTY_FIELD  : new SomeObject();

Старый 19.12.2014, 14:43
hellopaso вне форума Посмотреть профиль Отправить личное сообщение для hellopaso Найти все сообщения от hellopaso
  № 6  
Ответить с цитированием
hellopaso

Регистрация: Aug 2011
Сообщений: 28
1) двухмерный массив обязательно

2) check() в каждом frame обязательно

получается што этот способ лучшее
Код AS3:
 
private function check():void {
 
				for (var i:int = 0; i < COLS; i++){
 
					for (var l:int = 0; l < ROWS; l++){
 
						if (array[i][l] is int){ 
 
                                                        var myInt:int = array[i][l];
 
                                                        if (myInt == EMPTY){
 
	                                                        trace("empty!");
                                                           }
 
						}
 
						else {
 
							trace("object!")
 
						}
					}
				}
			}

Старый 19.12.2014, 14:50
samana вне форума Посмотреть профиль Отправить личное сообщение для samana Найти все сообщения от samana
  № 7  
Ответить с цитированием
samana
 
Аватар для samana

блогер
Регистрация: Mar 2008
Адрес: Днепропетровск
Сообщений: 1,783
Записей в блоге: 3
Этот код не лучше, он в общем-то такой же почти.
Объясните пожалуйста, для чего вам метод check? Вы хотите посчитать кол-во свободных мест на всём поле? Или хотите узнать какие клетки пустые? Или вы хотите узнать состояние конкретной клетки?
В данный момент, ваш код просто выведет кол-во пустых клеток.

Код AS3:
 var myInt:int = array[i][l];
Сомневаюсь, что это правильно, ведь если объект в массиве существует, то приведение его к int должно вызвать ошибку.

Старый 19.12.2014, 15:53
hellopaso вне форума Посмотреть профиль Отправить личное сообщение для hellopaso Найти все сообщения от hellopaso
  № 8  
Ответить с цитированием
hellopaso

Регистрация: Aug 2011
Сообщений: 28
а какой check() по вашему лучше по производительности?

проблема в том что первый создает много объектов String

Старый 19.12.2014, 16:04
in4core вне форума Посмотреть профиль Отправить личное сообщение для in4core Найти все сообщения от in4core
  № 9  
Ответить с цитированием
in4core
[+4 06.05.14]
 
Аватар для in4core

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
Цитата:
а какой check() по вашему лучше по производительности?

проблема в том что первый создает много объектов String
Вообще весь код плохо оформлен, то есть даже не сам код, а архитектура. Расскажите, что делаем и вам подскажут более предметно, пока непонятно, что вы хотите и чем помочь по факту
__________________
Марк Tween

Старый 20.12.2014, 12:21
dimarik вне форума Посмотреть профиль Отправить личное сообщение для dimarik Найти все сообщения от dimarik
  № 10  
Ответить с цитированием
dimarik
.
 
Аватар для dimarik

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
А так?
Код AS3:
if (array[i][l] === EMPTY_FIELD){
__________________
Воспитан в TimeZero. Работаю в Mail.ru.

Создать новую тему Ответ Часовой пояс GMT +4, время: 22:27.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 22:27.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.