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

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

Ответ
 
Stormswind
Рядовой Орды
offline
Опыт: 1,560
Активность:
Юнит внутри юнита
Цель: добиться атаки из разных точек юнита
Пример: танк имеет 2 ракетные установки, 2 пушки и пулемет, нужно чтобы из всех этих орудий шел огонь (например как в игре Warhammer 40 k техника), причем огонь может идти не только по одной цели, но и по разным (пулемет по пехоте, пушки против танков и т.д., к тому же все это происходит одновременно
Реализация: Юниты с способностью москиты следуют за основным юнитом и стреляют когда тот атакует.
Почему нужно использовать юнитов, а не способность? Потому что можно через них настраивать точку начала атаки, что нельзя сделать через способность ракеты, или пламя феникса, или москиты.
Проблема: собственно реализация, многофункциональность (что будет если несколько танков передвигаются и стреляют, то есть привязать к каждой единице своих "внутренних" юнитов) и утечки.
Прошу помочь!
Старый 21.02.2013, 23:38
Hellfim
Новичок
offline
Опыт: 79,707
Активность:
Прошу показать вашу реализацию.
Старый 21.02.2013, 23:59
Stormswind
Рядовой Орды
offline
Опыт: 1,560
Активность:
Реализации нет, есть только наработки. После нескольких неудачных попыток решил обратится за помощью. Атак я думаю можно сделать пока на 1 танк на гуи
EX:
1 триггер
Событие: unit enter in region
Условие: unit type - танк
Действие: add last creating в переменную танк
Создать юнита на месте созданного
add last created в переменную пушка
2 триггер
Событие: period event 0,03
Действие: move пушка на место танка
Это все что я пока надумал. Как видите не никакой многофункцианальности, кучи утечек и тд, сейчас нарабатываю систему, жду дельных советов или готовых решений.
Старый 22.02.2013, 00:24
ScorpioT1000
Работаем
online
Опыт: отключен
У дальней атаки в РО есть точка, откуда будет произведен выстрел. Дальше сам додумаешь)
Старый 22.02.2013, 00:24
Stormswind
Рядовой Орды
offline
Опыт: 1,560
Активность:
Да, так оно и есть, но дело в том, что в warcrafte нельзя использовать больше двух типов атак на юнита, а также существует только одна точка крепления атаки, что невозможно реализовать в моем случае, так как точек атак несколько. Поэтому это можно реализовать, только в случае если юнитов будет несколько в одном юните и каждый отвечает за свое оружие, один за ракетницу, другой за пулемет и тд. Причем можно будет настроить так, чтобы ракеты вылетали из установки, а пули шли из пулемета(благодаря тем же точкам атаки). Проблема заключается в том, как весь этот "отряд" соединить в одно целое, то есть реализовать общее передвижение, атаку и тд, а главное нужно чтобы была многофункциональность. Другими словами: танк - это оболочка, а невидимые юниты внутри него и есть оружие которое стреляет по разным целям.

Отредактировано Stormswind, 22.02.2013 в 00:36.
Старый 22.02.2013, 00:28
ScorpioT1000
Работаем
online
Опыт: отключен
Так в чем проблема то? =) цилиндрические координаты
ScorpioT1000 добавил:
// z - vertical

//spheric -> decart(x,y,z)
x = Cos(a)*Cos(b)*distance
y = Sin(a)*Cos(b)*distance
z = Sin(b)*distance

//decart -> spheric(distance,a,b)
distance = sqrt(x*x + y*y + z*z)
a = ATan2(y, x)
b = ATan2(z, SquareRoot(x*x + y*y))
сфера для того, чтобы при повороте танка, другие юниты были все в том же месте относительно его центра
Старый 22.02.2013, 00:46
Stormswind
Рядовой Орды
offline
Опыт: 1,560
Активность:
А как же решить проблему с общей атакой и многофункциональностью, это только повороты, можно наработку?
Старый 22.02.2013, 01:07
Fakov
Viva la Fa
offline
Опыт: 102,058
Активность:
Играй с разрешенными целями атакующих юнитов.
Старый 22.02.2013, 07:03
Ancient
Щпаовапа
offline
Опыт: 38,370
Активность:
Stormswind, во первых, юнитов нужно двигать через SetUnitX/Y, иначе сбиваеться приказ и не возможно стрелять. Во вторых, действительно поиграйся с разрешенными целями или таблицой с типами атак и защиты юнитов. И в 3 что бы все это выглядело красиво, юзай функции которые скорп дал.
Старый 22.02.2013, 10:01
Hellfim
Новичок
offline
Опыт: 79,707
Активность:
Stormswind, если тебе не важно в кого будут палить твои орудия, то ты просто каждому даммику настраиваешь точку начала атаки, траекторию и перемещаешь их вместе с танком каждые 0.025 секунд. При этом нужно перемещать каждое орудие относительно центра и угла, на который смотрит юнит. Последнее можно опустить, если не важно откуда будет производиться пальба.
Старый 22.02.2013, 12:48
Stormswind
Рядовой Орды
offline
Опыт: 1,560
Активность:
Спасибо за подсказки и помощь, но главная проблема остается открытой - реализация. Как все это я смогу реализовать на языке jass, или GUI, не обязательно кидать мне готовые примеры, я лишь прошу написать мне предположительный каркас триггера, через который я смогу все это сделать. Нужно ли мне использовать переменные или отряды для нескольких таких юнитов? И будут ли утечки если предположительно танков будет 10 и каждые 0,20 секунд будет идти проверка на их перемещение? Прощу объяснить
Старый 22.02.2013, 13:49
ScorpioT1000
Работаем
online
Опыт: отключен
struct tank
{	
	static thistype tanks[];
	static int count = 0;
	int index;
	unit chassis // ведущий юнит
	// тут варьируются юниты-пушки, сам смотри
	unit leftGun 
	unit rightGun
	unit machinegun
	
	// создание (статический метод)
	static thistype New(real x, real y, int rawcode) { // тут варьируются типы юнитов для пушек, сам смотри
		local thistype this = tank.create()
		.chassis = CreateUnit( ... x , y, rawcode ... )
		.leftGun = CreateUnit( ... x , y - нужное мат. смещение, см формулу выше ... )
		.rightGun= CreateUnit( ... x , y - нужное мат. смещение, см формулу выше ... )
		.machinegun= CreateUnit( ... x , y - нужное мат. смещение, см формулу выше ... )
		.index = thistype.count++;
		thistype.tanks[.index] = this;
		return this
	}
	
	// обновление
	thistype Update() {
		// тут варьируются юниты-пушки, сам смотри
		SetUnitX(.leftGun,  x - нужное мат. смещение относительно .chassis, см формулу выше )
		SetUnitY(.leftGun,  y - нужное мат. смещение относительно .chassis, см формулу выше )
		SetUnitX(.rightGun,  x - нужное мат. смещение относительно .chassis, см формулу выше )
		SetUnitY(.rightGun,  y - нужное мат. смещение относительно .chassis, см формулу выше )
		SetUnitX(.machinegun,  x - нужное мат. смещение относительно .chassis, см формулу выше )
		SetUnitY(.machinegun,  y - нужное мат. смещение относительно .chassis, см формулу выше )
	}
	
	// удаление
	void Delete() {
		KillUnit(.leftGun)
		KillUnit(.rightGun)
		KillUnit(.machinegun)
		this.destroy()
		thistype.tanks[.index] = thistype.tanks[thistype.count];
		.count --;
	}
	
}
	



// ....................................................................................................​.........................................
	
// периодически, по таймеру:
for(int i=0; i < thistype.count; ++i) {
	if( GetUnitTypeId(thistype.tanks[i].chassis ) <= 0 ) {
		thistype.tanks[i].Delete()
	}
	thistype.tanks[i].Update()
}

// когда нужно создать новый танк:
tank.New(0.0, 0.0, 'A001'); // тут варьируются юниты-пушки, сам смотри
нужен самый последний cjass и vjass, он включен в jngp

Отредактировано ScorpioT1000, 22.02.2013 в 15:13.
Старый 22.02.2013, 14:14
Stormswind
Рядовой Орды
offline
Опыт: 1,560
Активность:
Ого спасибо за помощь, единственное не заметил в вашей наработке то, что если танк умирает, исчезают ли юниты (пушки) внутри его?

Отредактировано Stormswind, 22.02.2013 в 14:43.
Старый 22.02.2013, 14:28
insane88
hail xgm
offline
Опыт: 2,228
Активность:
а разве способность "пламя феникса" (или как-то так) не может помочь? можно настроить типы целей для нескольких абилок, конечно, тогда придется заморочиться, если атака юнита будет изменяться в течение игры, но имхо это избавит от лишних проблем с утечками, особенно на гуи.
Старый 22.02.2013, 15:04
Stormswind
Рядовой Орды
offline
Опыт: 1,560
Активность:
В способностях нельзя настраивать точки начала атаки
Старый 22.02.2013, 15:09
ScorpioT1000
Работаем
online
Опыт: отключен
Ого спасибо за помощь, единственное не заметил в вашей наработке то, что если танк умирает, исчезают ли юниты (пушки) внутри его
if( GetUnitTypeId(thistype.tanks[i].chassis ) <= 0 ) {
		thistype.tanks[i].Delete()
ScorpioT1000 добавил:
в методе delete убивай их =)
вот в той проверке еще можно добавить проверка на классификацию dead
ScorpioT1000 добавил:
обновил пост выше
Старый 22.02.2013, 15:12
Stormswind
Рядовой Орды
offline
Опыт: 1,560
Активность:
Спасибо за поддержку!
Старый 22.02.2013, 15:40
Ответ

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

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

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

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



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