Проблема с RTS
| |
cosferaps | Дата: Четверг, 26 Января 2012, 23:11 | Сообщение # 1 |
почетный гость
Сейчас нет на сайте
| Всем привет! Стал делать пример RTS по просьбе одного человека и столкнулся вот с чем: если выбрать рабочего и указать ему на шахту, то он подойдёт к ней, но не будет собирать ресурсы, а, если щёлкнуть ещё раз, то будет. Вот исходник:RTS Подскажите в чём ошибся.
GMS MC
Сообщение отредактировал cosferaps - Четверг, 26 Января 2012, 23:11 |
|
| |
kashey | Дата: Четверг, 26 Января 2012, 23:29 | Сообщение # 2 |
постоянный участник
Сейчас нет на сайте
| Твой исходник нечитаем. Совсем. Посмотри как разбивают код другие люди. Система тоже построена непонятно как. Код разбросан по разным обьектам, хотя для этого случая достаточно было одного, который контролировал бы весь процесс. Советую составить на бумаге алгоритм и еще раз вдумчиво переписать код, рационально используя доступные ресурсы.
Лично мне проще написать код заново, чем разбираться в этой каше, ты уж не обижайся
|
|
| |
cosferaps | Дата: Пятница, 27 Января 2012, 00:15 | Сообщение # 3 |
почетный гость
Сейчас нет на сайте
| kashey, ок, попробую понятней щас сделать Добавлено (27.01.2012, 00:04) --------------------------------------------- Странно, но проблема устранилась сама собой, хотя всего лишь проверку ресов у юнита поставил в условие. Ниче не понял ХД Добавлено (27.01.2012, 00:15) --------------------------------------------- Как доделаю, выложу пример RTS со всеми стандартными функциями. Только вот совет бы не мешал. Я хотел сделать 2 типа юнитов: воин и стрелок. Но принцип работы у них одинаковый. Только воин стреляет(ударяет) на расстоянии в 5 ед. от противника, а лучник в 100. Может кто-нибудь подскажет, как по-другому можно этот механизм(ближний бой) реализовать? Заранее, спасибо за ответы
GMS MC
|
|
| |
kashey | Дата: Пятница, 27 Января 2012, 00:25 | Сообщение # 4 |
постоянный участник
Сейчас нет на сайте
| Quote (cosferaps) как по-другому можно этот механизм(ближний бой) реализовать? Ближний бой? Идем к противнику до столкновения. Если есть столкновение - играем анимацию удара и отнимаем очки жизни. А зачем тебе по-другому?
|
|
| |
cosferaps | Дата: Пятница, 27 Января 2012, 11:31 | Сообщение # 5 |
почетный гость
Сейчас нет на сайте
| kashey, так интересней . Добавлено (27.01.2012, 11:31) --------------------------------------------- А как проиграть анимацию, если спрайт объекта рисуется?
GMS MC
|
|
| |
kashey | Дата: Пятница, 27 Января 2012, 12:08 | Сообщение # 6 |
постоянный участник
Сейчас нет на сайте
| draw_sprite_ext(sprite_imdex,image_index,x,y,image_xscale,image_yscale,image_angle,image_blend,image_alpha)
Учитывает все факторы, влияющие на спрайт. В большинстве случаев именно этой функцией и нужно пользоваться.
|
|
| |
Qvant | Дата: Пятница, 27 Января 2012, 12:09 | Сообщение # 7 |
почти ветеран
Сейчас нет на сайте
| Quote (cosferaps) как проиграть анимацию, если спрайт объекта рисуется? draw_sprite( sprite, subimg, x, y ); draw_sprite_general( sprite, subimg, left, top, width, height, x, y, xscale, yscale, rot, c1, c2, c3, c4, alpha );
subimg - номер кадра спрайта
|
|
| |
cosferaps | Дата: Пятница, 27 Января 2012, 22:08 | Сообщение # 8 |
почетный гость
Сейчас нет на сайте
| Qvant, Quote draw_sprite( sprite, subimg, x, y ); draw_sprite_general( sprite, subimg, left, top, width, height, x, y, xscale, yscale, rot, c1, c2, c3, c4, alpha );
subimg - номер кадра спрайта Ну и?
GMS MC
|
|
| |
Qvant | Дата: Пятница, 27 Января 2012, 22:54 | Сообщение # 9 |
почти ветеран
Сейчас нет на сайте
| ну и ответили на твой вопрос Quote (cosferaps) А как проиграть анимацию, если спрайт объекта рисуется?
|
|
| |
cosferaps | Дата: Суббота, 28 Января 2012, 08:47 | Сообщение # 10 |
почетный гость
Сейчас нет на сайте
| Qvant, ничего от этого кода не изменилось .
GMS MC
|
|
| |
Qvant | Дата: Суббота, 28 Января 2012, 10:44 | Сообщение # 11 |
почти ветеран
Сейчас нет на сайте
| Quote (cosferaps) Qvant, ничего от этого кода не изменилось А не скромный вопрос вы справку ГМ изучили , прежде чем начать делать игру ? ... или натырив исходником и поменять спрайты и немного кода сделать свою игру ?
Сначала САМ отрисуй спрайт собитием рисования , а потом меняешь кадр спрайта с помощью subimg и вот твоя анимация.
|
|
| |
cosferaps | Дата: Суббота, 28 Января 2012, 11:05 | Сообщение # 12 |
почетный гость
Сейчас нет на сайте
| Qvant, draw_sprite_general(sprite,subimg,left,top,right,bottom,x,y,xscale,yscale,rot,c1,c2,c3,c4,alpha) Общая функция отрисовки спрайта. Рисует указанную часть кадра subimg (-1 = текущий) спрайта с левым верхним углом части в позиции (x,y), но теперь с коэффициентами масштабирования, углом вращения, цветом для каждых четырёх граней (левый верхний, правый верхний, нижний правый и нижний левый), и величиной alpha прозрачности.
А я имел ввиду, есть ли функция рисования, которая проигрывает анимацию. С помощью "алямов" и вспомогательных переменных любой дурак сделает это, используя Code draw_sprite( sprite, subimg, x, y ) Мне нужен более короткий вариант . Единственное, что остаётся: использовать это????Code imgs//переменная, которая будет отвечать за скорость смены кадров subimg//будет отвечать за номер кадра + небольшой цикл или без него draw_sprite( sprite, subimg, x, y )// ф-ия, которая будет рисовать кадр Добавлено (28.01.2012, 11:05) --------------------------------------------- И ещё вопрос: если вынести общий код некоторых объектов в скрипт, то это уменьшит нагрузку на ОП?
GMS MC
Сообщение отредактировал cosferaps - Суббота, 28 Января 2012, 11:03 |
|
| |
Qvant | Дата: Суббота, 28 Января 2012, 11:16 | Сообщение # 13 |
почти ветеран
Сейчас нет на сайте
| Нет в рисовании кадры в draw_sprite вручную , но если хочется использовать image_speed то можно например так :
Code _new_object = object_add() _new_instance = instance_create (x,y,_new_object) _new_instance.sprite_index = sprite _new_instance.image_speed = 1 _new_instance.image_index = 1
он будит работать быстрее чем рисование но надо будит не забывать удалять _new_object и _new_instance когда они будут не нужны
|
|
| |
cosferaps | Дата: Суббота, 28 Января 2012, 11:25 | Сообщение # 14 |
почетный гость
Сейчас нет на сайте
| Qvant, для объекта "о" и спрайта "so" из 3-ёх кадров будет такой код в степ: Code o.sprite_index = so o.image_speed = 0.2 o.image_index = 1 или я что-то не так понимаю? Извиняюсь, за недоходчивость
GMS MC
|
|
| |
Qvant | Дата: Суббота, 28 Января 2012, 11:36 | Сообщение # 15 |
почти ветеран
Сейчас нет на сайте
| new_object = object_add() - создаёт "пустой" объект _new_instance = instance_create (x,y,_new_object) - ставит в комнате образец new_object с координатами x,y (x,y берутся из координат объекта из которого выполняется этот код) _new_instance.sprite_index = sprite - устанавливает образцу _new_instance спрайт sprite _new_instance.image_speed = 1 - устанавливает образцу _new_instance скорость смены кадров - 1 раз за шаг _new_instance.image_index = 1 - устанавливает образцу _new_instance кадр №1
этот код вызывается один раз и у вас в координатах x,y будит рисоватться анимированый спрайт без вашего участия...
|
|
| |
cosferaps | Дата: Суббота, 28 Января 2012, 11:41 | Сообщение # 16 |
почетный гость
Сейчас нет на сайте
| Qvant, аааа дошло, то есть используется всопогательный объект спасибо.
GMS MC
|
|
| |
Qvant | Дата: Суббота, 28 Января 2012, 11:46 | Сообщение # 17 |
почти ветеран
Сейчас нет на сайте
| только потом их удалять не забывай
рисование в этом смысле проще ставиш переменную номер кадра а потом приращение делаешь subimg +=1 if subimg>максимальный кадр спрайта { subimg =0 } draw_sprite( sprite, subimg, x, y );
Сообщение отредактировал Qvant - Суббота, 28 Января 2012, 12:00 |
|
| | |
kashey | Дата: Суббота, 28 Января 2012, 15:21 | Сообщение # 19 |
постоянный участник
Сейчас нет на сайте
| В высшей степени извращенные у вас варианты решения У обьекта анимация играется независимо от того, что рисуется в Драв. Если только имаж_спид не равно нулю.
Есть у обьекта спрайт "стоять" и анимированный спрайт "атаковать". Если нам нужно в определенный момент (по нажатию клавиши например) проиграть анимацию "атаковать" - делаем так: Криэйт: Quote sprite_index="стоять" Нажатие клавиши: Quote sprite_index="атаковать" Конец анимации: Quote if "условие при котором анимация должна смениться обратно на "стоять"" sprite_index="стоять" Драв: Quote draw_sprite(sprite_index,image_index,x,y)
Все... Зачем там вспомогательные обьекты и тучи ненужных переменных для меня загадка.
Сообщение отредактировал kashey - Суббота, 28 Января 2012, 15:21 |
|
| |
cosferaps | Дата: Понедельник, 06 Февраля 2012, 18:19 | Сообщение # 20 |
почетный гость
Сейчас нет на сайте
| kashey, ха, спасибо поробую так, если что.
Добавлено (31.01.2012, 11:22) --------------------------------------------- И вот, назрел ещё один вопрос :) При нажатии ЛКМ создаётся объект, а при отпускании ЛКМ он должен удаляться. НО, когда выбираешь один из пунктов в функции show_menu("1|2|3",0), то он создаётся, но не уничтожается, пока ещё раз не нажать ЛКМ. Помогите пожалуйста, не знаю, как решить проблему. спасибо.Добавлено (06.02.2012, 18:19) --------------------------------------------- Народ, у меня возникла проблема. Делаю ример РТС для одного человека и там есть шахты с ресурсами. Когда ресурсы истощаются, нужно чтобы рабочий шёл к следущей шахте, у которой они есть, но сделать не получается. Подскажите, пожалуйста!
GMS MC
Сообщение отредактировал cosferaps - Среда, 01 Февраля 2012, 14:15 |
|
| |
|