Четверг, 26 Декабря 2024, 04:04

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

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Создание двух одинаковых обьектов одновременно
nekroo98Дата: Суббота, 12 Октября 2013, 10:55 | Сообщение # 1
почетный гость
Сейчас нет на сайте
Может я чего то не понимаю, но разве так должно быть? distance_to_point увеличивает значение при движении по +х\+у и уменьшает по -х\-у? При этом изначальное значение в точке, откуда идет расчер - примерно = 140750.

Как нормально измерить дистанцию от точки до точки?


Сообщение отредактировал nekroo98 - Четверг, 26 Марта 2015, 12:41
berilДата: Суббота, 12 Октября 2013, 12:43 | Сообщение # 2
Я не ленивый, я — энергосберегающий
Сейчас нет на сайте
Возможно я ошибаюсь. Можно использовать return



Накодил? Убери за собой!
Инвентарь в Unity(UI)
Инвентарь в Unity(GUI)
KingДата: Суббота, 12 Октября 2013, 14:19 | Сообщение # 3
участник
Сейчас нет на сайте
Честно говоря, ничего не понял.
distance_to_point(x,y) показывает расстояние от точки в которой находится объект, в котором она вызвана, до точки указанной в аргументах. Что при отрицательных значениях координат, что при нормальных, функция всегда нормально показывает расстояние от x1|y1 до x2|y2. Наверное я что то недопонял.


Nothing is true, everything is permitted.
Shadows Games
FadeBakerДата: Суббота, 12 Октября 2013, 15:14 | Сообщение # 4
JavaSE Game Developer
Сейчас нет на сайте
Попробуй point_distance(x1, y1, x2, y2), может, больше соответствует требованиям.

Уроки по GM
Minecraft 2D на GM
— Мои проекты —
Blood Harvest [2D] — Original
Blood Harvest [2D]: Remastered Edition
Adventure Craft [2D] — Sandbox
Space Shock [2D] — Scroll Shooter
Intel® Core™ i5-3570K 3.40 GHz, 8 GB RAM, GeForce GTX 750 Ti, Monitor: LG 23EA63V-P.
nekroo98Дата: Суббота, 12 Октября 2013, 16:06 | Сообщение # 5
почетный гость
Сейчас нет на сайте
Цитата Fade ()
Попробуй point_distance(x1, y1, x2, y2), может, больше соответствует требованиям.

Действительно, эта функция работает как нужно. Странно, ведь вроде разницы то нет.
FadeBakerДата: Суббота, 12 Октября 2013, 17:11 | Сообщение # 6
JavaSE Game Developer
Сейчас нет на сайте
Цитата nekroo98 ()
Странно, ведь вроде разницы то нет.

Цитата King ()
расстояние от точки в которой находится объект

А эта функция принимает непосредственно сами координаты точек.


Уроки по GM
Minecraft 2D на GM
— Мои проекты —
Blood Harvest [2D] — Original
Blood Harvest [2D]: Remastered Edition
Adventure Craft [2D] — Sandbox
Space Shock [2D] — Scroll Shooter
Intel® Core™ i5-3570K 3.40 GHz, 8 GB RAM, GeForce GTX 750 Ti, Monitor: LG 23EA63V-P.
nekroo98Дата: Понедельник, 14 Октября 2013, 22:02 | Сообщение # 7
почетный гость
Сейчас нет на сайте
Не буду создавать новую тему, спрошу тут.
Наверняка многие видели, как в различных играх отрисовывается урон. Когда из персонажа "вылетают" цифры.

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

Но. Если в этот момент будет получен ещё урон, значение "первого" просто заменится и он продолжит лететь, пока не уничтожится. Проблема, как я понимаю, в том, что мы создаем один и тот же обьект с разными значениями.

Внимание, вопрос happy :
Как добиться отображения всех "чисел" одновременно?
GavolotДата: Понедельник, 14 Октября 2013, 22:17 | Сообщение # 8
Последователь Тени
Сейчас нет на сайте
Так создавай просто новый объект, так проще и дешевле других методов. Во всяком случае в гм. Любые массивы в гм обрабатываются дороже чем новый объект, а стандартными дс листами делать, тоже как-то бредновато.

Добавлено (14.10.2013, 22:17)
---------------------------------------------
Точнее создавай новый экзмемпляр объекта, который уничтожится с алармом. Грузить игру не должно.


В общем что-то делаю, но пока не пойму ни как :)
Тень - выражение основной сущности человека.
nekroo98Дата: Понедельник, 14 Октября 2013, 23:08 | Сообщение # 9
почетный гость
Сейчас нет на сайте
Цитата Gavolot ()
Так создавай просто новый объект, так проще и дешевле других методов. Во всяком случае в гм. Любые массивы в гм обрабатываются дороже чем новый объект, а стандартными дс листами делать, тоже как-то бредновато.


На пальцах обьясни как это выглядит с кодом. Сейчас у меня примерно следущее
Код
if input_damage > 0 {блаблабла, расчет урона, instance_create(x,y,damage_drawer); damage_drawer.kolichestvo_yrona = полученный в расчетах дамаг;
input_damage = 0;}

Получаешь дамаг - создается обьект. Если во время жизни этого обьекта снова получаешь дамаг, новый обьект не создается, заменяется значение дамага в первом и все.

В самом обьекте-рисовалке
Код
alarm[0]=90;   
в аларме {instance_destroy()}


Сообщение отредактировал nekroo98 - Понедельник, 14 Октября 2013, 23:27
FadeBakerДата: Вторник, 15 Октября 2013, 00:35 | Сообщение # 10
JavaSE Game Developer
Сейчас нет на сайте
Create:
Код
ticks = 0;

Step:
Код
y -= 1; //По своему усмотрению
if ((ticks += 1) > room_speed * 2) instance_destroy();

Draw:
Код
draw_text(x, y, text); //Точно не помню функцию рисования текста, но, по-моему, так


Там, где нужно создать:
Код
dmg = instance_create(x, y, твойОбъект);
dmg.text = string(урон);


Уроки по GM
Minecraft 2D на GM
— Мои проекты —
Blood Harvest [2D] — Original
Blood Harvest [2D]: Remastered Edition
Adventure Craft [2D] — Sandbox
Space Shock [2D] — Scroll Shooter
Intel® Core™ i5-3570K 3.40 GHz, 8 GB RAM, GeForce GTX 750 Ti, Monitor: LG 23EA63V-P.


Сообщение отредактировал Fade - Вторник, 15 Октября 2013, 00:36
nekroo98Дата: Вторник, 15 Октября 2013, 02:18 | Сообщение # 11
почетный гость
Сейчас нет на сайте
А что это изменит? Я немного не правильно обрисовал проблему. Обьект то новый создается, только значение урона меняется в ОБОИХ, т.е. в новом и в старом, будет НОВОЕ значение.
Вот можете посмотреть пример. На код и ошибки не обращайте внимания, я специально подкрутил для наглядности smile
В общем, уточню требование: необходимо, чтобы создавалось 2 и более обьектов, с разными значениями урона.
ТЫК
SalahAdDinДата: Вторник, 15 Октября 2013, 16:25 | Сообщение # 12
постоянный участник
Сейчас нет на сайте
Задавай значение переменной в криэйт нового. Он, криэйт выполняется один раз.
А вообще дешевле написать скрипт чем создавать обьект. К слову.


Фотошоп это не сложно. Немного теории, полезной на практике:
Работа с наложением текстур
Рисуем без планшета
nekroo98Дата: Вторник, 15 Октября 2013, 20:42 | Сообщение # 13
почетный гость
Сейчас нет на сайте
Цитата
Задавай значение переменной в криэйт нового. Он, криэйт выполняется один раз.
А вообще дешевле написать скрипт чем создавать обьект. К слову.


Спасибо. В криэйте так сделать неполучится, так как сначала создается обьект, потом обрабатывается его событие "Create", а уже потом ему извне что-то присваивается.

Так что пишем в Криэйте alarm[0]=1;
И уже в аларме то, что нам надо.

Спасибо за идею, как то недодумался до такой фигни smile


Сообщение отредактировал nekroo98 - Четверг, 17 Октября 2013, 10:31
SalahAdDinДата: Суббота, 26 Октября 2013, 13:19 | Сообщение # 14
постоянный участник
Сейчас нет на сайте
instance_create().n=10
Все там прекрасно задается.


Фотошоп это не сложно. Немного теории, полезной на практике:
Работа с наложением текстур
Рисуем без планшета
nekroo98Дата: Четверг, 26 Марта 2015, 08:30 | Сообщение # 15
почетный гость
Сейчас нет на сайте
Некропостинга время!

Если событие происходит одновременно с 2 и более обьектами, цифра урона вылетает из всех одинаковая.
Как с этим быть и что делать?
EfimovMaxДата: Четверг, 26 Марта 2015, 11:39 | Сообщение # 16
заслуженный участник
Сейчас нет на сайте
Цитата nekroo98 ()
Если событие происходит одновременно с 2 и более обьектами, цифра урона вылетает из всех одинаковая.
Как с этим быть и что делать?

Если я правильно понял проблему.
У тебя событие "выпадения" цифр где происходит? Если код написан в игроке, то естественно он не будет правильно работать. Засунь его во врагов.


Текущий проект: The Experiment ☭

Выпущенные проекты Steam:
Princess.Loot.Pixel.Again
Princess.Loot.Pixel.Again x2
Dungetris
nekroo98Дата: Четверг, 26 Марта 2015, 12:20 | Сообщение # 17
почетный гость
Сейчас нет на сайте
Ок, обьясняю.
В каждом герое и враге есть одинаковый скрипт
Код
instance_create(x-10,y-20,simple_damage_summ_drawer);simple_damage_summ_drawer.damage=(тут формула расчета дамага)

Далее, в созданном обьекте simple_damage_summ_drawer и отрисовывается дамаг. (это как бы вылетающая из врага циферка)

Если урон идет по одному врагу за 1 шаг - все ок. Но, если урон наносится двум и более врагов за 1 шаг, значение simple_damage_summ_drawer.damage меняется во всех обьектах - рисовальщиках дамага.

Выглядит вот так:
Урон только на одного чувака в голубой робе:


А вот если зацепить атакой их обоих - вылетает значение урона по ангелу, причем из обоих. Сам урон наносится корректно:


Если провести 2 атаки подряд по одному чуваку - тоже все корректно, значения разные:


Проблема именно в одном шаге и нескольких обьектах-рисовальщиках, созданных одновременно.


Сообщение отредактировал nekroo98 - Четверг, 26 Марта 2015, 12:43
EfimovMaxДата: Четверг, 26 Марта 2015, 12:51 | Сообщение # 18
заслуженный участник
Сейчас нет на сайте
Потому что твой код обращается ко всем созданным инстанциям. Меняй на это:

Код

NewDamDraw=instance_create(x-10,y-20,simple_damage_summ_drawer)
NewDamDraw.damage=(тут формула расчета дамага)


Первой строкой создаётся объект, Id которого мы запоминаем в NewDamDraw, второй строкой идёт обращение к нему по Id (то есть конкретно к новосозданному объекту).


Текущий проект: The Experiment ☭

Выпущенные проекты Steam:
Princess.Loot.Pixel.Again
Princess.Loot.Pixel.Again x2
Dungetris


Сообщение отредактировал EfimovMax - Четверг, 26 Марта 2015, 12:55
nekroo98Дата: Четверг, 26 Марта 2015, 13:01 | Сообщение # 19
почетный гость
Сейчас нет на сайте
Даладнаааааа, наконецто все правильно как задумано.

А можно по подробнее? NewDamDraw это просто переменная, где хранится ид созданного обьекта или типо того?
EfimovMaxДата: Четверг, 26 Марта 2015, 13:15 | Сообщение # 20
заслуженный участник
Сейчас нет на сайте
Цитата nekroo98 ()
А можно по подробнее? NewDamDraw это просто переменная, где хранится ид созданного обьекта или типо того?

Да, просто переменная. У каждого объекта в GM есть свой идентификатор (Id). Посмотреть на него можно в редакторе уровней, наведя курсором на объект - внизу появятся его координаты, имя и Id. Если в коде нужно обратиться к какому-то определённому объекту, можно писать его идентификатор (inst_21A65E55.speed=12). Если же нужно получить Id объекта, пишем objTest.id.
Как я и написал ранее, NewDamDraw запоминает Id только что созданного объекта, и после мы меняем значение damage только у него.


Текущий проект: The Experiment ☭

Выпущенные проекты Steam:
Princess.Loot.Pixel.Again
Princess.Loot.Pixel.Again x2
Dungetris
  • Страница 1 из 1
  • 1
Поиск:

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