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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 10.03.2010, 15:53
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 1  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
По умолчанию Куда делось 7 n? (Duff's device)

Код AS3:
var n:int = 8;
var a:Array/*int*/ = [];
var from:int = 100;
 
trace(n);
 
switch (--n)
{
	case 7: a[n] = from++;
	case 6: a[n] = from++;
	case 5: a[n] = from++;
	case 4: a[n] = from++;
	case 3: a[n] = from++;
	case 2: a[n] = from++;
	case 1: a[n] = from++;
	case 0: a[n] = from++;
	default: break;
}
trace(a, n, from);
Объясните пожалуйста!

EDIT: Оказалось, что условие switch'a не проверяется в каждом кейсе...
Код AS3:
var n:int = 0;
var a:Array/*int*/ = [];
var from:int = 100;
 
trace(n);
 
switch (true)
{
	case 0: a[n++] = from++;
	case 1: a[n++] = from++;
	case 2: a[n++] = from++;
	case 3: a[n++] = from++;
	case 4: a[n++] = from++;
	case 5: a[n++] = from++;
	case 6: a[n++] = from++;
	case 7: a[n++] = from++;
	default: break;
}
trace(a, n, from);
Кстати, если сделать так - нас встретит VerifyError
__________________
Hell is the possibility of sanity


Последний раз редактировалось wvxvw; 10.03.2010 в 16:04.
Старый 10.03.2010, 16:50
switcher! вне форума Посмотреть профиль Отправить личное сообщение для switcher! Найти все сообщения от switcher!
  № 2  
Ответить с цитированием
switcher!

Регистрация: May 2009
Сообщений: 220
в общем-то, так и должно быть, как вы привели в первой части поста.
Проверка в блоке switch идет до первого вхождения условия, а потом, если не встречается break -> выполняются команды все подряд.

Это позволяет, к примеру, обозначить команду "влево" для персонажа более коротко:
Код AS3:
switch (e.keyCode)
{
	...
	case 37:
	case 65:
		trace("влево");
	break;
	...
}
нежели:
Код AS3:
switch (e.keyCode)
{
	...
	case 37:
		trace("влево");
	break;
 
	case 65:
		trace("влево");
	break;
	...
}

Старый 10.03.2010, 17:10
Котяра вне форума Посмотреть профиль Отправить личное сообщение для Котяра Посетить домашнюю страницу Котяра Найти все сообщения от Котяра
  № 3  
Ответить с цитированием
Котяра
буду краток
 
Аватар для Котяра

модератор форума
Регистрация: Sep 2003
Адрес: Ближайшее Замкадье
Сообщений: 3,110
Записей в блоге: 28
Отправить сообщение для Котяра с помощью ICQ Отправить сообщение для Котяра с помощью Skype™
wvxvw - у тебя украли аккаунт? уж больно вопросы нубские))))))
__________________
Отряд Котовскага

Старый 10.03.2010, 17:36
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 4  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
А вы второй пример попробуйте, первый был неудачный просто.
__________________
Hell is the possibility of sanity

Старый 10.03.2010, 18:17
Волгоградец вне форума Посмотреть профиль Отправить личное сообщение для Волгоградец Найти все сообщения от Волгоградец
  № 5  
Ответить с цитированием
Волгоградец
 
Аватар для Волгоградец

блогер
Регистрация: Sep 2007
Адрес: Гамбург
Сообщений: 1,648
Записей в блоге: 12
Цитата:
%1 and %2 cannot be reconciled.
* Note: This error indicates that the ActionScript in the SWF is invalid. If you believe that the file has not been corrupted, please report the problem to Adobe.
Здесь int и * не могут "примириться". Что бы это значило?

Старый 10.03.2010, 18:56
udaaff вне форума Посмотреть профиль Отправить личное сообщение для udaaff Найти все сообщения от udaaff
  № 6  
Ответить с цитированием
udaaff
...

модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
Код AS3:
var n:int = 0;
var a:Array/*int*/ = [];
var from:int = 100;
 
trace(n);
 
switch (true)
{
	case 0: { a[n++] = from++ };
	case 1: { a[n++] = from++ };
	case 2: { a[n++] = from++ };
	case 3: { a[n++] = from++ };
	case 4: { a[n++] = from++ };
	case 5: { a[n++] = from++ };
	case 6: { a[n++] = from++ };
	case 7: { a[n++] = from++ };
	default: break;
}
trace(a, n, from);
Так без ошибки, хотя что происходит я не понимаю

Старый 10.03.2010, 19:01
aksios вне форума Посмотреть профиль Отправить личное сообщение для aksios Найти все сообщения от aksios
  № 7  
Ответить с цитированием
aksios
loading 50%
 
Аватар для aksios

Регистрация: Jun 2005
Адрес: I am where I should be
Сообщений: 3,567
Отправить сообщение для aksios с помощью ICQ
wvxvw, а Вы раньше уже использовали такую конструкцию: switch (true) ?
По моему скромному мнению это вызовет ошибку.
Если туда поставить нормальную переменную то все заработает.
Свитч без брейков - фи.

Старый 10.03.2010, 19:22
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 8  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Switch без брейков - это Duff's device! так что не надо. Это можно сказать старинный способ оптимизировать циклы.
А вообще, я на самом деле пытался сделать небезопасный поинтер силами AS но чет пока не получается
Последняя попытка выглядела вот так:
Код AS3:
var n:int = 0;
var a:Array/*int*/ = [];
 
trace(n);
 
switch (true)
{
	case true: a[++n] = n;
	case true: a[++n] = n;
	case true: a[++n] = n;
	case true: a[++n] = n;
	case true: a[++n] = n;
	case true: a[++n] = n;
	case true: a[++n] = n;
	case true: a[++n] = n;
	default: break;
}
trace(a, n);
Но она тоже не запускается
__________________
Hell is the possibility of sanity

Старый 11.03.2010, 09:32
Котяра вне форума Посмотреть профиль Отправить личное сообщение для Котяра Посетить домашнюю страницу Котяра Найти все сообщения от Котяра
  № 9  
Ответить с цитированием
Котяра
буду краток
 
Аватар для Котяра

модератор форума
Регистрация: Sep 2003
Адрес: Ближайшее Замкадье
Сообщений: 3,110
Записей в блоге: 28
Отправить сообщение для Котяра с помощью ICQ Отправить сообщение для Котяра с помощью Skype™
непонятно что ты хочешь сделать.
Код AS3:
var n:int = 0;
var a:Array/*int*/ = [];
 
trace(n);
 
switch (true)// выполнится один раз
{
	case true: a[++n] = n;//всегда
	case true: a[++n] = n;//всегда
	case true: a[++n] = n;//всегда
	case true: a[++n] = n;//всегда
	case true: a[++n] = n;//всегда
	case true: a[++n] = n;//всегда
	case true: a[++n] = n;//всегда
	case true: a[++n] = n;//всегда
	default: break;
}
trace(a, n);
если не считать, что флаги меток у кэйсов должны быть разные (по сути это метки GOTO(бэйсик/фортран) или jmp(асм))
аналогично:
Код AS3:
var n:int = 0;
var a:Array/*int*/ = [];
 
trace(n);
a[++n] = n;
a[++n] = n;
a[++n] = n;
a[++n] = n;
a[++n] = n;
a[++n] = n;
a[++n] = n;
a[++n] = n;
trace(a, n);

в этом коде при портировании вы забыли про while
Код AS3:
strcpy(to, from, count)
register char *to, *from;
register count;
{
    register n = (count + 7) / 8;
    switch (count % 8) {
    case 0: do { *to = *from++;
    case 7:      *to = *from++;
    case 6:      *to = *from++;
    case 5:      *to = *from++;
    case 4:      *to = *from++;
    case 3:      *to = *from++;
    case 2:      *to = *from++;
    case 1:      *to = *from++;
               } while (--n > 0); // вот тут то и делается возврат к свичу, вернее, к выбору метки
    }
}
__________________
Отряд Котовскага


Последний раз редактировалось Котяра; 11.03.2010 в 09:36.
Создать новую тему Ответ Часовой пояс GMT +4, время: 07:53.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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