Связаться со мной в VK можно через личные сообщения этой группы
Заказы не принимаю
Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
Великих идей полно, на них нет спроса.
Воплощение идеи в законченную игру требует долгой работы,
таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
Предложить идею просто, воплотить – вот в чём проблема
Steve Pavlina
DeimoS, инициализируй переменную index вне цикла, и увидишь результат, при новой итерации присваиваешь одно и тоже значение, смысл?
Лол, я ожидал чего-то подобного. Только вот как вы себе представляете ваш код без цикла? Где записывать ID анимации, чтоб его потом сверять при нажатии нужных кнопок?
Каждая итерация соответствует одному нажатию нужных нам кнопок. И чтоб всё работало как надо, нам нужно узнавать ID проигрываемой анимации при каждом из нажатий. Мой код делает именно это. А ваш?
Ваш тест никак не отражает работу switch. Разница в скорости достигается именно тем, что вы вызываете функцию вне цикла и в цикле. И разница будет даже если вы просто будете выводить полученное значение в консоль, а не проверять его в switch. В общем, вы проверяли не то :)
- - - Добавлено - - -
И да, я же уже дал вам код, который может показать то, сколько раз вызывается функция. И там видно, что switch вызывает функцию ровно 1 раз. Какие ещё могут быть вопросы то? Не вводите людей в заблуждение :(
Связаться со мной в VK можно через личные сообщения этой группы
Заказы не принимаю
Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
Великих идей полно, на них нет спроса.
Воплощение идеи в законченную игру требует долгой работы,
таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
Предложить идею просто, воплотить – вот в чём проблема
Steve Pavlina
Код:
PHP код:
new time = GetTickCount();
new a = 0;
for(new i; i != 1000000; i++)
{
switch (function()) {
case 1..5: a = 1;
}
}
printf("Цикл 1 сработал за %d мс", GetTickCount()-time);
time = GetTickCount();
new func = function();
for(new i; i != 1000000; i++)
{
switch (func) {
case 1..5: a = 1;
}
}
printf("Цикл 2 сработал за %d мс", GetTickCount()-time);
Результаты:PHP код:
stock function () {
return 5;
}
Операционная система:PHP код:
[23:32:17] Цикл 1 сработал за 43 мс
[23:32:17] Цикл 2 сработал за 30 мс
- - - Добавлено - - -PHP код:
Linux inn0va 3.17.0-031700rc4-generic #201409071935 SMP Mon Sep 8 01:02:20 UTC 2014 i686 i686 i686 GNU/Linux
Очевидно, что switch вызывает функцию при каждой проверке.
Ещё один...
А теперь проверьте так
дабы проверялся именно switch, а не факт того, что обращение к функции 1 раз, быстрее, нежели 1000000PHP код:
new time = GetTickCount();
new a = 0;
for(new i; i != 1000000; i++)
{
switch (function()) {
case 1..5: a = 1;
}
}
printf("Цикл 1 сработал за %d мс", GetTickCount()-time);
time = GetTickCount();
new func;
for(new i; i != 1000000; i++)
{
func = function();
switch (func) {
case 1..5: a = 1;
}
}
printf("Цикл 2 сработал за %d мс", GetTickCount()-time);
Последний раз редактировалось DeimoS; 09.09.2014 в 22:48.
Связаться со мной в VK можно через личные сообщения этой группы
Заказы не принимаю
Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
Великих идей полно, на них нет спроса.
Воплощение идеи в законченную игру требует долгой работы,
таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
Предложить идею просто, воплотить – вот в чём проблема
Steve Pavlina
Разумеется, такой такой вариант будет медленнее, хотя-бы потому что, каждый раз переменной будет присваиваться значение, но, опять-же, для чего присваивать значение каждый раз? По моему это бессмысленно.
Тогда причём тут вообще switch? Вот тут
Второй вариант тоже будет работать быстрее, нежели первый. Вы отчаянно не хотите читать мои сообщения и вникать в них, как я посмотрю...PHP код:
new time = GetTickCount();
new string[3];
for(new i; i != 100000; i++)
{
format(string, sizeof(string), "%d", function());
SendClientMessageToAll(-1, string);
}
printf("Цикл 1 сработал за %d мс", GetTickCount()-time);
time = GetTickCount();
new func = function();
for(new i; i != 100000; i++)
{
format(string, sizeof(string), "%d", func);
SendClientMessageToAll(-1, string);
}
printf("Цикл 2 сработал за %d мс", GetTickCount()-time);
Последний раз редактировалось DeimoS; 09.09.2014 в 23:04.
Связаться со мной в VK можно через личные сообщения этой группы
Заказы не принимаю
Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
Великих идей полно, на них нет спроса.
Воплощение идеи в законченную игру требует долгой работы,
таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
Предложить идею просто, воплотить – вот в чём проблема
Steve Pavlina
Хорошо, до этого момента, я думал, что switch при каждой проверке будет вызывать функцию заного, потому что свитч переменной в разы быстрее, чем свитч функции напрямую, выйгрыш в скорости заметен. Конечно, если не присваивать переменной в цикле значение функции по новой, в практике, по крайней мере такого я никогда не видел.
Повторяю в сотый раз. Это не switch быстрее становится, это вы убираете из тела цикла обращение к функции. Это как сравнивать
иPHP код:
for(new i; i < GetMaxPlayers(); i++)
Разница тут в том, что в первом случае мы вызываем функцию GetMaxPlayers каждую итерацию, а во втором - нет.PHP код:
for(new i = GetMaxPlayers(); i != -1; i--)
switch же оптимизирован сам по себе и не требует каких-то лишних переменных. Да и как вы сделаете то, что требуется автору сей темы, без постоянного обращения к GetPlayerAnimationIndex?
Связаться со мной в VK можно через личные сообщения этой группы
Заказы не принимаю
Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
Великих идей полно, на них нет спроса.
Воплощение идеи в законченную игру требует долгой работы,
таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
Предложить идею просто, воплотить – вот в чём проблема
Steve Pavlina
Что-то я не припомню, чтобы я говорил, ЧТО SWITCH становится быстрее, это же очевидный бред, сказать, что выбирающий оператор switch будет быстрее, чем выбирающий оператор switch. Тавтология какая-то получается. Может быть это и так, что switch не требует лишних переменных, однако, если использовать if, будет другая история. А использовать switch, как единственный оператор выбора в коде - будет полнейшим бредом, собственно, изначально я хотел сказать про другое.
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)