Просмотр полной версии : [Вопрос] switch VS if else
Добрый вечер! Ребята скажите пожалуйста как будет лучше использовать??
new bomj_man[5][1]
{
1,
2,
3,
4,
5
}
new bomj_girl[6][1]
{
1,
2,
3,
4,
5,
6
}
switch:
switch(Player[playerid][pSex])
{
case 1:
{
if(Change[playerid] -- == 0) Change[playerid] = sizeof(bomj_man) - 1;
SetPlayerSkin(playerid, bomj_man[Change[playerid]][0]);
}
default:
{
if(Change[playerid] -- == 0) Change[playerid] = sizeof(bomj_girl) - 1;
SetPlayerSkin(playerid, bomj_girl[Change[playerid]][0]);
}
}
if else:
if(Player[playerid][pSex] == 1)
{
if(Change[playerid] == sizeof(bomj_man) - 1) Change[playerid] = 0;
else Change[playerid] ++;
SetPlayerSkin(playerid, bomj_man[Change[playerid]][0]);
}
else
{
if(Change[playerid] == sizeof(bomj_girl) - 1) Change[playerid] = 0;
else Change[playerid] ++;
SetPlayerSkin(playerid, bomj_girl[Change[playerid]][0]);
}
Слышал еще Тернарный оператор можно как то
Как тебе будет удобнее,так и делай. Тут особой разницы нет. Я бы использовал if else
TheMallard
23.04.2016, 17:50
if(Change[playerid] == sizeof(Player[playerid][pSex] ? bomj_man : bomj_girl))
Change[playerid] = 0;
else
Change[playerid] = 1;
SetPlayerSkin(playerid, Player[playerid][pSex] ? bomj_man[Change[playerid]][0] : bomj_girl[Change[playerid]][0]);
if(Change[playerid] == sizeof(Player[playerid][pSex] ? bomj_man : bomj_girl))
Change[playerid] = 0;
else
Change[playerid] = 1;
SetPlayerSkin(playerid, Player[playerid][pSex] ? bomj_man[Change[playerid]][0] : bomj_girl[Change[playerid]][0]);
Может объяснить принцип работы пожалуйста
- - - Добавлено - - -
Вместо всего этого:
switch(Player[playerid][pSex])
{
case 1:
{
if(Change[playerid] -- == 0) Change[playerid] = sizeof(bomj_man) - 1;
SetPlayerSkin(playerid, bomj_man[Change[playerid]][0]);
}
default:
{
if(Change[playerid] -- == 0) Change[playerid] = sizeof(bomj_girl) - 1;
SetPlayerSkin(playerid, bomj_girl[Change[playerid]][0]);
}
}
У нас будет выглядить так я прав???
if(Change[playerid] --/*(листаем на 1 назад)*/ == 0) Change[playerid] = sizeof(Player[playerid][pSex] ? bomj_man : bomj_girl) - 1;
SetPlayerSkin(playerid, Player[playerid][pSex] ? bomj_man[Change[playerid]][0] : bomj_girl[Change[playerid]][0]);
SetPlayerSkin(playerid, bomj_man[Change[playerid]][0]);
Nash_Brigers
23.04.2016, 18:52
У нас будет выглядить так я прав???Да, только лишняя строчка:
SetPlayerSkin(playerid, bomj_man[Change[playerid]][0]);
if(Change[playerid] --/*(листаем на 1 назад)*/ == 0) Change[playerid] = sizeof(Player[playerid][pSex] ? bomj_man : bomj_girl) - 1;
SetPlayerSkin(playerid, Player[playerid][pSex] ? bomj_man[Change[playerid]][0] : bomj_girl[Change[playerid]][0]);
Если вас не затруднит можете подробнее рассказать что да как это получилось, Что то про Тернарный оператор прочёл не не понял
Nash_Brigers
23.04.2016, 19:04
if(Change[playerid] --/*(листаем на 1 назад)*/ == 0) Change[playerid] = sizeof(Player[playerid][pSex] ? bomj_man : bomj_girl) - 1;
SetPlayerSkin(playerid, Player[playerid][pSex] ? bomj_man[Change[playerid]][0] : bomj_girl[Change[playerid]][0]);
Если вас не затруднит можете подробнее рассказать что да как это получилось, Что то про Тернарный оператор прочёл не не понял
В общем смотри.. Рассмотрим на примере:
Player[playerid][pSex] ? bomj_man[Change[playerid]][0] : bomj_girl[Change[playerid]][0]Расшифровываю: Player[playerid][pSex] не равен нулю ? тогда bomj_man[Change[playerid]][0] : в остальных случаях bomj_girl[Change[playerid]][0]
Еслиб, к примеру, мужской пол у тебя был двойка:
(Player[playerid][pSex] == 2) ? bomj_man[Change[playerid]][0] : bomj_girl[Change[playerid]][0]
Учитель из меня ни какой, не знаю понятно ли..
TheMallard
23.04.2016, 19:05
Тернарный оператор работает так.
условие ? результат1 : результат2
Если условие true (>=1), то берется результат1, если условие false (0<=), то берется результат2. Ничего сложного.
Спасибо огромное ребята
Player[playerid][pSex]/*(тут у нас пол 1(муж.) 2(жен))*/ ? bomj_man[Change[playerid]][0]/*Player[playerid][pSex] если выдаёт 1 то использует это*/ : bomj_girl[Change[playerid]][0]/*если 2 то используем это*/
Правильно понял??
Nash_Brigers
23.04.2016, 19:17
Спасибо огромное ребята
Player[playerid][pSex]/*(тут у нас пол 1(муж.) 2(жен))*/ ? bomj_man[Change[playerid]][0]/*Player[playerid][pSex] если выдаёт 1 то использует это*/ : bomj_girl[Change[playerid]][0]/*если 2 то используем это*/
Правильно понял??Не совсем.. Если у тебя 1 мужики, то:
(Player[playerid][pSex] == 1) ? bomj_man[Change[playerid]][0] : bomj_girl[Change[playerid]][0];
Если просто Player[playerid][pSex], то он посмотрит есть ли значение в этой переменной или 0 в ней.
В общем
Player[playerid][pSex] ? bomj_man[Change[playerid]][0] : bomj_girl[Change[playerid]][0];
равносильно
(Player[playerid][pSex] != 0) ? bomj_man[Change[playerid]][0] : bomj_girl[Change[playerid]][0];
if(clickedid == <<[0])
{
if(Change[playerid] -- == 0) Change[playerid] = sizeof(Player[playerid][pSex] == 1 ? bomj_man : bomj_girl) - 1;
SetPlayerSkin(playerid, Player[playerid][pSex] == 1 ? bomj_man[Change[playerid]][0] : bomj_girl[Change[playerid]][0]);
}
При компилирование:
C:\Users\Microsoft\Desktop\samp037_svr_R2-1-1_win32_\gamemodes\Untitled.pwn(458) : error 001: expected token: "]", but found "-identifier-"
C:\Users\Microsoft\Desktop\samp037_svr_R2-1-1_win32_\gamemodes\Untitled.pwn(458) : warning 215: expression has no effect
C:\Users\Microsoft\Desktop\samp037_svr_R2-1-1_win32_\gamemodes\Untitled.pwn(458) : error 001: expected token: ";", but found "]"
C:\Users\Microsoft\Desktop\samp037_svr_R2-1-1_win32_\gamemodes\Untitled.pwn(458) : error 029: invalid expression, assumed zero
C:\Users\Microsoft\Desktop\samp037_svr_R2-1-1_win32_\gamemodes\Untitled.pwn(458) : fatal error 107: too many error messages on one line
Compilation aborted.Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase
4 Errors.
Nash_Brigers
23.04.2016, 20:05
if(clickedid == <<[0])
{
if(Change[playerid] -- == 0) Change[playerid] = sizeof(Player[playerid][pSex] == 1 ? bomj_man : bomj_girl) - 1;
SetPlayerSkin(playerid, Player[playerid][pSex] == 1 ? bomj_man[Change[playerid]][0] : bomj_girl[Change[playerid]][0]);
}
При компилирование:
C:\Users\Microsoft\Desktop\samp037_svr_R2-1-1_win32_\gamemodes\Untitled.pwn(458) : error 001: expected token: "]", but found "-identifier-"
C:\Users\Microsoft\Desktop\samp037_svr_R2-1-1_win32_\gamemodes\Untitled.pwn(458) : warning 215: expression has no effect
C:\Users\Microsoft\Desktop\samp037_svr_R2-1-1_win32_\gamemodes\Untitled.pwn(458) : error 001: expected token: ";", but found "]"
C:\Users\Microsoft\Desktop\samp037_svr_R2-1-1_win32_\gamemodes\Untitled.pwn(458) : error 029: invalid expression, assumed zero
C:\Users\Microsoft\Desktop\samp037_svr_R2-1-1_win32_\gamemodes\Untitled.pwn(458) : fatal error 107: too many error messages on one line
Compilation aborted.Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase
4 Errors.
Ах да.. в sizeof так, вроде не получится сделать. Он не массив bomj_girl считает, а значение записанное в bomj_girl.. По другому значит надо сделать.
$continue$
23.04.2016, 20:31
Что, это за монстр такой?
if(clickedid == <<[0])
if(Player[playerid][pSex] == 1)
{
if(Change[playerid] ++ == sizeof(bomj_man) - 1) Change[playerid] = 0;
}
else
{
if(Change[playerid] ++ == sizeof(bomj_girl) - 1) Change[playerid] = 0;
}
SetPlayerSkin(playerid, Player[playerid][pSex] == 1 ? bomj_man[Change[playerid]][0] : bomj_girl[Change[playerid]][0]);
if(Player[playerid][pSex] == 1)
{
if(Change[playerid] -- == 0) Change[playerid] = sizeof(bomj_man) -1;
}
else
{
if(Change[playerid] -- == 0) Change[playerid] = sizeof(bomj_girl) -1;
}
SetPlayerSkin(playerid, Player[playerid][pSex] == 1 ? bomj_man[Change[playerid]][0] : bomj_girl[Change[playerid]][0]);
А если я так сделаю это нормальНо? нечему не навредит?
Powered by vBulletin® Version 4.2.0 Copyright © 2024 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot