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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 18.03.2011, 14:10
in4core вне форума Посмотреть профиль Отправить личное сообщение для in4core Найти все сообщения от in4core
  № 1  
Ответить с цитированием
in4core
[+4 06.05.14]
 
Аватар для in4core

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
По умолчанию переключение счетчика, а как делаете вы?

Вот есть такая задача - координата x растет от 0 до 100, как только доходит до 100 возвращается до 0.

Код AS3:
function test():void  {
 
 if(x >= 0 && _state == 'forward' )  x ++ ,  if ( x >=100 ) x = 100 , _state = 'backward';
 else x -- , if ( x == 0 ) _state = 'forward' ;
 
}
Мне кажется чейто, что есть более удобная реализация и короткая. Вообщем как делаете вы ?

Старый 18.03.2011, 14:28
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 2  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
Код AS3:
var _state:int = 1;
var minX:int = 0;
var maxX:int = 10;
function test ():void  {
	x+=_state;
	if (x < minX) {
		x = minX;
		_state *=-1;
		x += _state;
	} else if (x > maxX) {
		x = maxX;
		_state *=-1;
		x += _state;
	}
	trace (x, _state)
}
for (var i:int = 0; i< 40;i++) {
	test();
}
__________________
(и)Нильс.ru | Плагины для FlashDevelop

Старый 18.03.2011, 14:39
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 3  
Ответить с цитированием
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
Код AS3:
function test(event:Event):void  
{
	if ((x+= _step) == 100 || x == 0) _step *= -1;
}

Старый 18.03.2011, 14:48
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 4  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
Силин победил) Но так будет работать не всегда, если прирост будет равен 3, то == 100 не будет
__________________
(и)Нильс.ru | Плагины для FlashDevelop


Последний раз редактировалось iNils; 18.03.2011 в 14:51.
Старый 18.03.2011, 15:01
in4core вне форума Посмотреть профиль Отправить личное сообщение для in4core Найти все сообщения от in4core
  № 5  
Ответить с цитированием
in4core
[+4 06.05.14]
 
Аватар для in4core

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
iNils а в чем разница твоего и моего подхода ? Ну а насчет прироста в 3 можно >= поставить , не ?

Старый 18.03.2011, 15:11
i.o. вне форума Посмотреть профиль Отправить личное сообщение для i.o. Найти все сообщения от i.o.
  № 6  
Ответить с цитированием
i.o.
 
Аватар для i.o.

Регистрация: Apr 2010
Адрес: Earth
Сообщений: 1,897
Цитата:
Сообщение от in4core Посмотреть сообщение
iNils а в чем разница твоего и моего подхода ?
В том, что в математике не нужны строковые значения)

Старый 18.03.2011, 15:19
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 7  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
Цитата:
iNils а в чем разница твоего и моего подхода ?
Меньше проверок и телодвижений. Более гибкий код, можно менять границы и шаги.
Цитата:
Сообщение от in4core Посмотреть сообщение
Ну а насчет прироста в 3 можно >= поставить , не ?
Тогда все равно нужно компенсировать уход за пределы. Иначе будет значение 102, вместо 100.
__________________
(и)Нильс.ru | Плагины для FlashDevelop

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

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
Цитата:
Меньше проверок и телодвижений. Более гибкий код, можно менять границы и шаги.
Да, но, дело в том, что меня именно как раз интересовал подход *меньше строк*, да ваш код я понимаю в плане гибкости, но интересно было именно как можно короче все описать

Старый 18.03.2011, 15:23
alexcon314 вне форума Посмотреть профиль Отправить личное сообщение для alexcon314 Найти все сообщения от alexcon314
  № 9  
Ответить с цитированием
alexcon314
listener

модератор форума
Регистрация: Jun 2006
Сообщений: 3,260
Записей в блоге: 28
Отправить сообщение для alexcon314 с помощью ICQ
Если прям-таки уж линейность движения необязательна и нужна цикличность (хотя и без нее можно), можно обычным косинусом/синусом координату считать с нужными параметрами. Дольше? Пожалуй... Но просто: x = X*cos(intCount); координата "сама" меняется без всяких ифов в пределах [-X;X]. Можно поискать и другие функции. Одна строка, как вы и хотели. Поднастроить - нет проблем. Поменять коэффициентики и все.


Последний раз редактировалось alexcon314; 18.03.2011 в 15:30.
Старый 18.03.2011, 15:48
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 10  
Ответить с цитированием
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
>>Иначе будет значение 102, вместо 100.
попасть в 100 стартуя из 0 с шагом 3 вообще мудрено
тока если дробить каждый шаг
Код AS3:
private var _step:Number = 1;
private function test(event:Event):void  
{
	for (var i:int = 0; i < 3; i++) 
		if ((x += _step) == 100 || x == 0) _step *= -1;
}
Добавлено через 3 минуты
зы. ни о чем тема
>>Вообщем как делаете вы ?
готовыми твинерами пользуюсь Ж)

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

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

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


 


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


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