Суббота, 20 Апреля 2024, 06:02

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 2
  • 1
  • 2
  • »
Форум игроделов » Конструкторы игр и лёгкие в освоении системы разработки игр » Game Maker » Проблема с RTS (никак не пойму, в чём ошибка)
Проблема с RTS
cosferapsДата: Четверг, 26 Января 2012, 23:11 | Сообщение # 1
почетный гость
Сейчас нет на сайте
smile Всем привет!
Стал делать пример RTS по просьбе одного человека и столкнулся вот с чем: если выбрать рабочего и указать ему на шахту, то он подойдёт к ней, но не будет собирать ресурсы, а, если щёлкнуть ещё раз, то будет.
Вот исходник:RTS
Подскажите в чём ошибся.


GMS MC

Сообщение отредактировал cosferaps - Четверг, 26 Января 2012, 23:11
kasheyДата: Четверг, 26 Января 2012, 23:29 | Сообщение # 2
постоянный участник
Сейчас нет на сайте
Твой исходник нечитаем. Совсем. Посмотри как разбивают код другие люди.
Система тоже построена непонятно как. Код разбросан по разным обьектам, хотя для этого случая достаточно было одного, который контролировал бы весь процесс.
Советую составить на бумаге алгоритм и еще раз вдумчиво переписать код, рационально используя доступные ресурсы.

Лично мне проще написать код заново, чем разбираться в этой каше, ты уж не обижайся smile
cosferapsДата: Пятница, 27 Января 2012, 00:15 | Сообщение # 3
почетный гость
Сейчас нет на сайте
kashey, ок, попробую понятней щас сделать cool

Добавлено (27.01.2012, 00:04)
---------------------------------------------
Странно, но проблема устранилась сама собой, хотя всего лишь проверку ресов у юнита поставил в условие. Ниче не понял ХД biggrin

Добавлено (27.01.2012, 00:15)
---------------------------------------------
Как доделаю, выложу пример RTS smile со всеми стандартными функциями.

Только вот совет бы не мешал
. Я хотел сделать 2 типа юнитов: воин и стрелок.
Но принцип работы у них одинаковый. Только воин стреляет(ударяет) на расстоянии в 5 ед. от противника, а лучник в 100. Может кто-нибудь подскажет, как по-другому можно этот механизм(ближний бой) реализовать? smile
Заранее, спасибо за ответы smile


GMS MC
kasheyДата: Пятница, 27 Января 2012, 00:25 | Сообщение # 4
постоянный участник
Сейчас нет на сайте
Quote (cosferaps)
как по-другому можно этот механизм(ближний бой) реализовать?

Ближний бой? smile
Идем к противнику до столкновения. Если есть столкновение - играем анимацию удара и отнимаем очки жизни.
А зачем тебе по-другому? smile
cosferapsДата: Пятница, 27 Января 2012, 11:31 | Сообщение # 5
почетный гость
Сейчас нет на сайте
kashey, так интересней biggrin .

Добавлено (27.01.2012, 11:31)
---------------------------------------------
А как проиграть анимацию, если спрайт объекта рисуется? smile


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 - номер кадра спрайта

Ну и? smile


GMS MC
QvantДата: Пятница, 27 Января 2012, 22:54 | Сообщение # 9
почти ветеран
Сейчас нет на сайте
Quote (cosferaps)
Ну и?

ну и ответили на твой вопрос
Quote (cosferaps)
А как проиграть анимацию, если спрайт объекта рисуется?
cosferapsДата: Суббота, 28 Января 2012, 08:47 | Сообщение # 10
почетный гость
Сейчас нет на сайте
Qvant, ничего от этого кода не изменилось sad .

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 )

Мне нужен более короткий вариант smile .
Единственное, что остаётся: использовать это????
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

или я что-то не так понимаю? Извиняюсь, за недоходчивость wacko smile


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, аааа дошло, то есть используется всопогательный объект smile спасибо.

GMS MC
QvantДата: Суббота, 28 Января 2012, 11:46 | Сообщение # 17
почти ветеран
Сейчас нет на сайте
только потом их удалять не забывай biggrin

рисование в этом смысле проще ставиш переменную номер кадра а потом приращение делаешь
subimg +=1
if subimg>максимальный кадр спрайта
{
subimg =0
}
draw_sprite( sprite, subimg, x, y );


Сообщение отредактировал Qvant - Суббота, 28 Января 2012, 12:00
cosferapsДата: Суббота, 28 Января 2012, 11:57 | Сообщение # 18
почетный гость
Сейчас нет на сайте
Qvant, ну да smile я об этом говорил smile
cool спасибо за помощь, кэп.


GMS MC
kasheyДата: Суббота, 28 Января 2012, 15:21 | Сообщение # 19
постоянный участник
Сейчас нет на сайте
В высшей степени извращенные у вас варианты решения smile
У обьекта анимация играется независимо от того, что рисуется в Драв. Если только имаж_спид не равно нулю.

Есть у обьекта спрайт "стоять" и анимированный спрайт "атаковать".
Если нам нужно в определенный момент (по нажатию клавиши например) проиграть анимацию "атаковать" - делаем так:
Криэйт:
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, ха, спасибо smile поробую так, если что.

Добавлено (31.01.2012, 11:22)
---------------------------------------------
И вот, назрел ещё один вопрос :)
При нажатии ЛКМ создаётся объект, а при отпускании ЛКМ он должен удаляться. НО, когда выбираешь один из пунктов в функции show_menu("1|2|3",0), то он создаётся, но не уничтожается, пока ещё раз не нажать ЛКМ. Помогите пожалуйста, не знаю, как решить проблему. smile спасибо.

Добавлено (06.02.2012, 18:19)
---------------------------------------------
Народ, у меня возникла проблема. Делаю ример РТС для одного человека и там есть шахты с ресурсами. Когда ресурсы истощаются, нужно чтобы рабочий шёл к следущей шахте, у которой они есть, но сделать не получается. Подскажите, пожалуйста!


GMS MC

Сообщение отредактировал cosferaps - Среда, 01 Февраля 2012, 14:15
Форум игроделов » Конструкторы игр и лёгкие в освоении системы разработки игр » Game Maker » Проблема с RTS (никак не пойму, в чём ошибка)
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг