XGM Forum
Сайт - Статьи - Проекты - Ресурсы - Блоги

Форуме в режиме ТОЛЬКО ЧТЕНИЕ. Вы можете задать вопросы в Q/A на сайте, либо создать свой проект или ресурс.
Вернуться   XGM Forum > Warcraft> Академия: форум для вопросов> Jass
Ник
Пароль
Войти через VK в один клик
Сайт использует только имя.

Ответ
 
SiT3D

offline
Опыт: 1,514
Активность:
Функции чёрт их побери! Передача функций.
Здрасте. Спасибо за предыдущую помощь, много нового узнал. Написал огромную красивую функцию различных типов движения, теперь сижу и думаю зачем = ).
В общем, что хочу. Чтобы эта функция возвращала результат завершения. Или чтобы в неё можно было передать имя функции, которую она выполнит по завершению. Пример.
Снаряд летит за юнитом, и только тогда, когда его догонит, выполняется определённая функция, задающая, новый тип движения. Моя функция знает когда она завершается, только как это вернуть...с юнитом конечно можно событие создавать. А при прямолинейном движение или равноускоренном, можно получить и подставить результат. Но всё же хотелось бы. Эх.
Если нельзя передать такую функцию, то надо думать как красиво это всё отследить. Заранее благодарен =)

Отредактировано SiT3D, 30.05.2013 в 18:38.
Старый 30.05.2013, 18:14
Hate
конь вакуумный
offline
Опыт: 43,033
Активность:
ну я бы делал так
enum { TYPE_1, TYPE_2, TYPE_3 }


(имеем в аттаче инт переменную допустим под названием mov_type)
...
	if mov_type == TYPE_1 {
		делаем так
	}
	elseif mov_type == TYPE_2 {
		делаем по другому
	}
	...
а вообще сложно что либо сказать ибо хз что вы там натворили
Старый 30.05.2013, 18:39
SiT3D

offline
Опыт: 1,514
Активность:
=))) ты как всегда =) я думал о таком, чтобы передавать скажем некий id а потом через if подбирать и выполнять соответствующую, функцию, но это как то, много будет писанины то, я хочу 1й функцией любое движения, для любых объектов описывать =))))) может зря конечно.
Старый 30.05.2013, 18:51
Hate
конь вакуумный
offline
Опыт: 43,033
Активность:
что бы вскинуть руки на клавиатуру и все готово - так не будет (ц) диод
Старый 30.05.2013, 18:53
SiT3D

offline
Опыт: 1,514
Активность:
А можно скажем сделать так, я знаю что можно но не знаю как точно. В общем есть ряд функций с именами Move_id где id = некому номеру. И через макрос, задавать строку call Move_(переданый номер)
SiT3D добавил:
Как это сделать?
SiT3D добавил:
а сверху уже нужные функции я то напишу, они по ходу будут создаваться и обдумываться, для разных заклинаний
Старый 30.05.2013, 18:55
Hate
конь вакуумный
offline
Опыт: 43,033
Активность:
вы понимаете что хотите динамично подменять код? насколько я знаю, максимум вы можете делать ExecuteFunc по строке, но это бессмысленно в данном случае и ненужно.
показывайте как делаете, чувствуется мне вы там все костылями сделали
Старый 30.05.2013, 18:57
SiT3D

offline
Опыт: 1,514
Активность:
Да кстати хэйт извиняюсь, я конечно всё равно считаю, что ты странный. Но всё же спасибо критика помогла мне во многом разобраться, теперь имхо 50% кода надо переписывать =0)))
SiT3D добавил:
та даже без кода, решениие то не в моей системе.
SiT3D добавил:
предположим как то так
define ExecuteFunc (id) = Execute##Func(Move_id)
да?
SiT3D добавил:
а если это запилить в библиотеку приватом, то вроде всё хорошо. Если конечно я правильно понимаю, работу этого макроса.
Старый 30.05.2013, 19:03
Hate
конь вакуумный
offline
Опыт: 43,033
Активность:
хоспаде, зачем?
int a =1

	ExecuteFunc("Move_"+I2S(a))
еще раз говорю, то для чего вы хотите использовать это, как открывать консервные банки айфоном. и еще раз, покажите то как вы собрались двигать. я абсолютно уверен что делать все через задний проход не нужно
Старый 30.05.2013, 19:08
SiT3D

offline
Опыт: 1,514
Активность:
Там много всего опять начнёшь говорить что код не читабелен, спасибушки =) всё работает, всё из нативок, и вроде всё довольно коротко и красиво. Вот конечно последнее может и не так, но я сам разберусь. Когда доделаю, тогда и буду оптимизировать код. Сейчас не надо пож. А на счёт экзекута, значит можно не id а строки передавать, это тоже очень хорошо, даже лучше.
SiT3D добавил:
а на счёт заднего прохода, ну как сказать может и так, но я ещё учусь, и это как то глупо, ругать и возмущаться, что кто-то чего то не умеет. Я тоже могу смеяться с того, что ты форумный задрот, и наверняка хуже меня в спорте, или ещё чтото в этом роде. Зачем? Каждый хорош в своём, главное двигаться, я вот двигаюсь, я учусь, а ты относишься с презрением потому, что я не умею того что умеешь ты...
SiT3D добавил:
ну или ты просто не умеешь нормально говорить о том, что готов помочь, может сейчас эти эпитеты не столь обидно звучат, но раньше ты явно пытался опустить. Эт так к размышлению, если тоже есть желание учиться.
Старый 30.05.2013, 19:22
Hate
конь вакуумный
offline
Опыт: 43,033
Активность:
вы просите помощи, но не идете навстречу, либо вы показываете как делаете и мы работаем дальше, либо вы не показываете его и остаетесь там откуда начали. все просто. насчет "рабочих" решений я уже недавно отписывался , да и если вы сами знаете как лучше то зачем вообще создавать тему и показывать себя королем?
я привык говорить факты, как есть, с презрением я отношусь к результатам какой либо деятельности, а не к самому человеку, умение воспринимать критику и есть успех во многом.
если вы так боитесь критики, ну тогда пишите в личку, какие либо контакты что бы это не было "публичным унижением", яхз
Старый 30.05.2013, 19:28
SiT3D

offline
Опыт: 1,514
Активность:
=))))) дак дело не в моём коде, нужна просто функция с 1 строкой вызова, но так чтобы эта 1 строка могла вызвать много разных функций, перебором через if это слишком затратно. Если таких функций будет 3 млн, то через if их точно нет смысла вызывать.
Старый 30.05.2013, 19:37
Hate
конь вакуумный
offline
Опыт: 43,033
Активность:
в таком случае смотрим пост номер 4)
Старый 30.05.2013, 19:38
SiT3D

offline
Опыт: 1,514
Активность:
function MultiFunction takes string func, (ещё операторы) returns nothing
 чтото делает
затем вызывает переданую функцию
	if чёта чёта then
		ExecuteFunc(func)
	endif
endfunction
так понятно, что требуется? В общем то это и надо было походу.
SiT3D добавил:
я просто никогда не использовал ExecuteFunc потому не сразу сообразил что так можно поступить, обычно я всё call делаю.
SiT3D добавил:
А вот ещё хотелось бы в хэш запилить строки, ключи. Вместо integer, как строке присвоить уникальное значение, в рамках допустимого числа инт? Может есть такие наработки?
Старый 30.05.2013, 19:46
Hate
конь вакуумный
offline
Опыт: 43,033
Активность:
только вот функции вызванные через экзекут не могут принимать ничего, а вы как об стенку бьетесь с костылями. сказал же, что не нужно это вам...
Старый 30.05.2013, 19:50
SiT3D

offline
Опыт: 1,514
Активность:
а мне и не надо ничего в них принимать =) они будут просто вызывать функцию движения с нужными настройками, вот и всё
SiT3D добавил:
всмысле в той функции, будут запланированые действия, нужный сценарий, который будет вызывать функцию движения с ручными настройками. Воть как то так =)
SiT3D добавил:
или не всё ( я пробну потом отпишусь. =0)
SiT3D добавил:
передавать если и надо будет. то можно глобалками с них не убудет.
Старый 30.05.2013, 20:02
J64_

offline
Опыт: 4,724
Активность:
Читаем про boolexpr. И передачу настроек(стек, хт, и тп)
Старый 31.05.2013, 09:10
SiT3D

offline
Опыт: 1,514
Активность:
Читал уже понять не могу (((
Старый 31.05.2013, 19:54
Buulichkaa
Делаю спеллы за еду
offline
Опыт: 20,146
Активность:
Для начального понимания самые легкие хеш-таблицы, но можно использовать и паралельные массивы...
Старый 31.05.2013, 21:15
Hate
конь вакуумный
offline
Опыт: 43,033
Активность:
Sargaraser:
Для начального понимания самые легкие хеш-таблицы, но можно использовать и паралельные массивы...
... и структуры)
Старый 31.05.2013, 21:32
SiT3D

offline
Опыт: 1,514
Активность:
Вы чего, я знаю про массивы и хэш. Короче тема закрыта, я всё уже придумал и сделал.
Старый 01.06.2013, 01:53
Ответ

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

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

BB-коды Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход



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