Четверг, 24.05.2012, 22:30

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

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

Я проффи

P.S. в будущем ХД))))...

http://mplay.3dn.ru/


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

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

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

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

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


Я проффи

P.S. в будущем ХД))))...

http://mplay.3dn.ru/
 
kasheyДата: Пятница, 27.01.2012, 00:25 | Сообщение # 4
постоянный участник
Сообщений: 406
Сейчас нет на сайте
Quote (cosferaps)
как по-другому можно этот механизм(ближний бой) реализовать?

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

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


Я проффи

P.S. в будущем ХД))))...

http://mplay.3dn.ru/
 
kasheyДата: Пятница, 27.01.2012, 12:08 | Сообщение # 6
постоянный участник
Сообщений: 406
Сейчас нет на сайте
draw_sprite_ext(sprite_imdex,image_index,x,y,image_xscale,image_yscale,image_angle,image_blend,image_alpha)

Учитывает все факторы, влияющие на спрайт. В большинстве случаев именно этой функцией и нужно пользоваться.
 
QvantДата: Пятница, 27.01.2012, 12:09 | Сообщение # 7
заслуженный участник
Сообщений: 503
Сейчас нет на сайте
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.01.2012, 22:08 | Сообщение # 8
частый гость
Сообщений: 49
Сейчас нет на сайте
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

Я проффи

P.S. в будущем ХД))))...

http://mplay.3dn.ru/
 
QvantДата: Пятница, 27.01.2012, 22:54 | Сообщение # 9
заслуженный участник
Сообщений: 503
Сейчас нет на сайте
Quote (cosferaps)
Ну и?

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

Я проффи

P.S. в будущем ХД))))...

http://mplay.3dn.ru/
 
QvantДата: Суббота, 28.01.2012, 10:44 | Сообщение # 11
заслуженный участник
Сообщений: 503
Сейчас нет на сайте
Quote (cosferaps)
Qvant, ничего от этого кода не изменилось

А не скромный вопрос вы справку ГМ изучили , прежде чем начать делать игру ?
... или натырив исходником и поменять спрайты и немного кода сделать свою игру ?

Сначала САМ отрисуй спрайт собитием рисования , а потом меняешь кадр спрайта с помощью subimg и вот твоя анимация.
 
cosferapsДата: Суббота, 28.01.2012, 11:05 | Сообщение # 12
частый гость
Сообщений: 49
Сейчас нет на сайте
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)
---------------------------------------------
И ещё вопрос: если вынести общий код некоторых объектов в скрипт, то это уменьшит нагрузку на ОП?


Я проффи

P.S. в будущем ХД))))...

http://mplay.3dn.ru/


Сообщение отредактировал cosferaps - Суббота, 28.01.2012, 11:03
 
QvantДата: Суббота, 28.01.2012, 11:16 | Сообщение # 13
заслуженный участник
Сообщений: 503
Сейчас нет на сайте
Нет в рисовании кадры в 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.01.2012, 11:25 | Сообщение # 14
частый гость
Сообщений: 49
Сейчас нет на сайте
Qvant, для объекта "о" и спрайта "so" из 3-ёх кадров будет такой код в степ:
Code
o.sprite_index = so  
o.image_speed = 0.2
o.image_index = 1

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

Я проффи

P.S. в будущем ХД))))...

http://mplay.3dn.ru/
 
QvantДата: Суббота, 28.01.2012, 11:36 | Сообщение # 15
заслуженный участник
Сообщений: 503
Сейчас нет на сайте
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.01.2012, 11:41 | Сообщение # 16
частый гость
Сообщений: 49
Сейчас нет на сайте
Qvant, аааа дошло, то есть используется всопогательный объект smile спасибо.

Я проффи

P.S. в будущем ХД))))...

http://mplay.3dn.ru/
 
QvantДата: Суббота, 28.01.2012, 11:46 | Сообщение # 17
заслуженный участник
Сообщений: 503
Сейчас нет на сайте
только потом их удалять не забывай biggrin

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

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

Я проффи

P.S. в будущем ХД))))...

http://mplay.3dn.ru/
 
kasheyДата: Суббота, 28.01.2012, 15:21 | Сообщение # 19
постоянный участник
Сообщений: 406
Сейчас нет на сайте
В высшей степени извращенные у вас варианты решения smile
У обьекта анимация играется независимо от того, что рисуется в Драв. Если только имаж_спид не равно нулю.

Есть у обьекта спрайт "стоять" и анимированный спрайт "атаковать".
Если нам нужно в определенный момент (по нажатию клавиши например) проиграть анимацию "атаковать" - делаем так:
Криэйт:
Quote
sprite_index="стоять"

Нажатие клавиши:
Quote
sprite_index="атаковать"

Конец анимации:
Quote
if "условие при котором анимация должна смениться обратно на "стоять""
sprite_index="стоять"

Драв:
Quote
draw_sprite(sprite_index,image_index,x,y)


Все...
Зачем там вспомогательные обьекты и тучи ненужных переменных для меня загадка.

Сообщение отредактировал kashey - Суббота, 28.01.2012, 15:21
 
cosferapsДата: Понедельник, 06.02.2012, 18:19 | Сообщение # 20
частый гость
Сообщений: 49
Сейчас нет на сайте
kashey, ха, спасибо smile поробую так, если что.

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

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


Я проффи

P.S. в будущем ХД))))...

http://mplay.3dn.ru/


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

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