Понедельник, 02 Декабря 2024, 16:05

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

[ Новые сообщения · Игроделы · Правила · Поиск ]
Результаты поиска
Dva_KotaДата: Четверг, 03 Марта 2011, 13:18 | Сообщение # 201 | Тема: Художник пытается освоить GML
заслуженный участник
Сейчас нет на сайте
В справке написано про prec и notme в первом абзаце на той же странице где и collision_point(), перед функциями.

Новый пример инвентаря! /20.06.2012/

Energy Wars
Dva_KotaДата: Среда, 02 Марта 2011, 23:04 | Сообщение # 202 | Тема: Гонки на GM
заслуженный участник
Сейчас нет на сайте
Мы просто друг друга не правильно поняли.
Made_In_USSR, Чекпоинты тут для того, чтобы нельзя было сильно срезать трассу (если пр краям трассы нет "заборчика"), их нужно расставлять, в основном, на поворотах. Есл у тебя трасса окружена забором, то вообще будет достаточно двух объектов ob_finish1 и ob_finish2 - один поставить на финише, другой на середине трассы.
NeZnayu, а мы с тобой друг друга не поняли вот в чем: я говорил про то как сделать чтобы вообще ни при каких условиях нельзя было проходить трассу в обратном направляении, а ты говоришь про то, как сделать чтобы это просто было не выгодно и в этом небыло смысла (придется проходить один лишний круг чтобы начали засчитываться круги в обратном направлении).

У меня вопросов больше нет (по крайней мере пока что).


Новый пример инвентаря! /20.06.2012/

Energy Wars
Dva_KotaДата: Среда, 02 Марта 2011, 22:42 | Сообщение # 203 | Тема: Гонки на GM
заслуженный участник
Сейчас нет на сайте
Мне кажется что объект ob_finish1 и переменная finish здесь лишние, т.к. они никак не влияют на направление прохождения кругов. Если нужно только в одну сторону чтобы засчитывались круги, то либо тот громоздкий код писать который я в начале предлогал (он мне не нравится), или при пересечении чекпоинтов присваивать переменной новое значения, проверяя предыдущее, как я предлагал выше, в посте №44 (но этот вариант тоже не очень удобный т.к. нужно для каждого экземпляра прописывать).
Получается что твой вариант самый простой и удобный в использовании.


Новый пример инвентаря! /20.06.2012/

Energy Wars


Сообщение отредактировал Dva_Kota - Среда, 02 Марта 2011, 22:43
Dva_KotaДата: Среда, 02 Марта 2011, 22:32 | Сообщение # 204 | Тема: Гонки на GM
заслуженный участник
Сейчас нет на сайте
тут не обязательно слева на право. Тут нужно чтобы сначала был пересечен объект ob_finish1, а потом ob_finish2. для этого не обязательно двигаться слева на право, можно и наоборот (я выше опимсал что произойдет при таком движении). Круг все равно нужно будет пройти, значит чекпоинты будут тоже все пройдены.

Новый пример инвентаря! /20.06.2012/

Energy Wars
Dva_KotaДата: Среда, 02 Марта 2011, 22:26 | Сообщение # 205 | Тема: Гонки на GM
заслуженный участник
Сейчас нет на сайте
Quote (Made_In_USSR)

Чтобы круг засчитывался только в одну сторону:

Это не поможет. Вот смотри: (в начале, как я понимаю, finish=0) мы едем не вперед, а назад, пересекаем ob_finish2 - ничего не происходит, пересекаем ob_finish1 -> finish=1; потом проезжаем круг, пересекаем obj_finish2 и нам засчитывается круг. По этому я в начале и писал тот сложный код с двумя переменными.
А так как тут все равно чекпоинты - все равно придется целый круг проходить чтобы он засчитался. Правда в любую сторону. Или я опять что-то не так понял?


Новый пример инвентаря! /20.06.2012/

Energy Wars


Сообщение отредактировал Dva_Kota - Среда, 02 Марта 2011, 22:27
Dva_KotaДата: Среда, 02 Марта 2011, 22:08 | Сообщение # 206 | Тема: Гонки на GM
заслуженный участник
Сейчас нет на сайте
А при старте комнаты не нужно задавать переменную global.checkpoints=0? а то ты при столкновении ее на 1 увеличиваешь, а она у тебя не задана...
И зачем тут вообще нужен объект ob_finish1 ?

Я совсем забыл про переменные xstart и ystart. Спасибо что напомнил. smile


Новый пример инвентаря! /20.06.2012/

Energy Wars


Сообщение отредактировал Dva_Kota - Среда, 02 Марта 2011, 22:10
Dva_KotaДата: Среда, 02 Марта 2011, 21:33 | Сообщение # 207 | Тема: Гонки на GM
заслуженный участник
Сейчас нет на сайте
Теперь я понял как ты хочешь реализовать это. smile
Я сначала подумал что координаты всех чекпоинтов ты хочешь прописать в каком то объекте и так их расставлять.

В создании чекпоинта записываем его координаты в две переменные. При столкновении с машиной переносим чекпоинт за границу комнаты и увеличиваем переменную на 1. Есть еще одна переменная в которую при старте комнаты записывается количество чекпоинтов. Если столкнулись с последним чекпоинтом (первая переменная стала равна второй переменной) - круг пройден. возвращаем все чекпоинты в начальные координаты (мы их записали в событии создания для каждого чекпоинта). И, наверное, финишную линию нужно отдельным объектом сделать, который будет появляться когда все чекпоинты пройдены, а то если круг будет считаться пройденным когда прошел последний чекпоинт - чекпоинты встанут на свои места и опять произойдет столкновение.

Правильно я понял идею?


Новый пример инвентаря! /20.06.2012/

Energy Wars
Dva_KotaДата: Среда, 02 Марта 2011, 20:48 | Сообщение # 208 | Тема: Гонки на GM
заслуженный участник
Сейчас нет на сайте
Made_In_USSR, тогда тебе нужно будет прописывать все точки куда нужно перемещать чекпоинт. Если делать несколько чекпоинтов то достаточно будет одной переменной вместо двух кодов, которые я писал выше. Думаю будет проще поставить несколько объектов, а еще проще прописать все чекпоинты через collision_line().

Делается это так (можно добавить и больше чекпоинтов):

Код в событии создания машины

Code
finish=0;

Код в шаге машины

Code
if (finish=0)
      {
      if (collision_line(x1_1,y1_1,x2_1,y2_1,igrok,0,0))
          {
          finish=1;
          }
      }
else
      {
      if (finish=1)
          {
          if (collision_line(x1_2,y1_2,x2_2,y2_2,igrok,0,0))
              {
              finish=2;
              }
          }
      else
          {
          if (finish=2)
              {
              if (collision_line(x1_3,y1_3,x2_3,y2_3,igrok,0,0))
                  {
                  finish=0;
                  }
              }
          }
      }

Здесь нужно написать координаты трех прямых, которые являются чекпоинтами (последняя - финишная линия)


Новый пример инвентаря! /20.06.2012/

Energy Wars


Сообщение отредактировал Dva_Kota - Среда, 02 Марта 2011, 20:49
Dva_KotaДата: Среда, 02 Марта 2011, 17:29 | Сообщение # 209 | Тема: Гонки на GM
заслуженный участник
Сейчас нет на сайте
чекпоинты - те же самые "финишные линии". Только они по всей трассе стоят (на каком-то расстоянии друг от друга). Ты что, в гонки не играл никогда biggrin ?
Делаешь переменную, ставишь ей значение 0. Допустим у тебя 3 чекпоинта, один из которых является финишной линией (который под номером 3). При пересечении первого чекпоинта проверяешь равна ли переменная 0. Если равна - ставишь ей значение 1. У второго проверяешь равна ли переменная 1. Если равна 1 то присваиваешь ей значение 2. у третьего чекпоинта проверяешь равна ли переменная 2. Если равна 2 то увеличиваешь количество кругов на 1 и присваиваешь переменной значение 0.

Добавлено (02.03.2011, 17:29)
---------------------------------------------
Получается что ты должен будешь обязательно для завершения круга пройти через все чекпоинты в определенной последовательности.


Новый пример инвентаря! /20.06.2012/

Energy Wars
Dva_KotaДата: Среда, 02 Марта 2011, 15:51 | Сообщение # 210 | Тема: Гонки на GM
заслуженный участник
Сейчас нет на сайте
Или чекпоинты или код который я предложил или еще что-нибудь. Ставить кучу чекпоинтов тоже не всегда рационально, но если в игре можно съезжать с трассы то, думаю, без них не обойтись.

Новый пример инвентаря! /20.06.2012/

Energy Wars
Dva_KotaДата: Среда, 02 Марта 2011, 13:17 | Сообщение # 211 | Тема: Гонки на GM
заслуженный участник
Сейчас нет на сайте
Нет, это не вариант: то же самое о чем говорили выше - можно будет ездить туда-сюда и будут постоянно засчитываться круги. Хотя можно поставить один объект там где финиш, а второй ровно на середине круга

Новый пример инвентаря! /20.06.2012/

Energy Wars
Dva_KotaДата: Вторник, 01 Марта 2011, 22:43 | Сообщение # 212 | Тема: Гонки на GM
заслуженный участник
Сейчас нет на сайте
Quote (Made_In_USSR)
Или я где то не доучился и переменная с булевым значением автоматически воспринимает "не" как противоположное булевое значение?

Quote (из справки)

!: отрицание, преображает истину в ложь и наоборот (0 в 1, 1 в 0)

Да, "!" меняет true на false и наоборот.

присвоение вида a=!a часто используется. меняет значение булевой переменной на противоположное.

Quote (Made_In_USSR)
И еще интересно где же можно еще кроме шага делать проверку через колижн_лайн

Я не много не правильно выразился. Выполнять код нужно в шаге, но не просто так. а предварительно проверяя, столкновение только что произошло (в этом шаге) или происходит уже не первый шаг подряд. Для этого можно ввести еще одну переменную, в начале присвоить ей значение false (Столкновения нет). Например будет это переменная col=false. В шаге проверяем столкновение если оно произошло - проверяем переменную, если она равна false выполняем наш код и меняем переменную на true. А когда столкновение перестанет происходить - меняем переменную обратно на false. Таким образом код будет выполняться только в момент столкновения, а не каждый шаг. Думаю кодом будет понятнее чем словами:
Code

if (collision_line(x1,y1,x2,y2,igrok,0,0))
     {
     if (!col)
         {
         if (f2=true)
             {
             f2=false;
             круг+=1;
             }
         else
             {
             f1=!f1;
             }
         }
     col=true;
     }
else
     {
     col=false;
     }


Новый пример инвентаря! /20.06.2012/

Energy Wars
Dva_KotaДата: Вторник, 01 Марта 2011, 21:35 | Сообщение # 213 | Тема: Гонки на GM
заслуженный участник
Сейчас нет на сайте
Quote (Strateg)
В случае с двумя линиями ничто не мешает отъехать назад и пересечь обе линии еще раз.
Придется поломать голову дольше 10-ти минут smile

Посмотри внимательно код, который я предлагаю для двух линий. Тут не получится просто отъехать назад:
Круг засчитывается только если f2=true при пересечении финишной линии. Это условие станет истиной только когда при пересечении линии перед финишем переменная f1=false. В начале f1=false, но если ты пересечешь финишную линию когда f2=false эта переменная поменяет свое значение на противоположное и круги не будут засчитываться ( f2=false при пересечении финишной линии возможно только когда ты поедешь в обратном направлении, когда опять поедешь правильно и пересечешь линию финиша - опять переменная примет свое значение)

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


Новый пример инвентаря! /20.06.2012/

Energy Wars
Dva_KotaДата: Понедельник, 28 Февраля 2011, 16:15 | Сообщение # 214 | Тема: Гонки на GM
заслуженный участник
Сейчас нет на сайте
Думаю одной линии будет не достаточно. Если только одна будет, то можно ездить по ней туда-сюда и будут засчитываться круги. Думаю тут нужно или делать чекпоинты по всей трассе, или делать две линии: одна финиш, другая перед финишем. Создаем переменную, две переменные, например f1 и f2.
При пересечении линии которая перед финишем код:
Code
if (f1=false)
{
f2=true;
}

при пересечении линии финиша такой код:

Code
if (f2=true)
{
f2=false;
круг+=1;
}
else
{
f1=!f1;
}

Это всё коды в объекте "машина". Если не понятно с collision_line() можешь просто объекты там поставить, вместо линий. Только ставь их не совсем рядом, а на таком расстоянии, чтобы между ними машина помещалась.

По поводу вращающейся карты: я думаю оба варианта хорошие.

p.s.: этот код я не проверял, но думаю что будет работать как нужно.


Новый пример инвентаря! /20.06.2012/

Energy Wars
Dva_KotaДата: Воскресенье, 27 Февраля 2011, 22:54 | Сообщение # 215 | Тема: Пак вопросов.
заслуженный участник
Сейчас нет на сайте
2. перед выводом окна сообщения создай рядом объект с этим спрайтом или нарисуй его в драв у какого-то объекта.

Новый пример инвентаря! /20.06.2012/

Energy Wars
Dva_KotaДата: Пятница, 25 Февраля 2011, 17:36 | Сообщение # 216 | Тема: Художник пытается освоить GML
заслуженный участник
Сейчас нет на сайте
Ну, например, по маске столкновений проверяется нажатие кнопок мышки "на объекте". Если маска будет прямоугольник, а спрайт - круг, то событие будет происходить пр нажатии в любой точке этого прямоугольника, т.е. не только на самом круге, а при точной проверке произойдет только при нажатии на самом круге, т.к. маска будет такой же формы.

Новый пример инвентаря! /20.06.2012/

Energy Wars
Dva_KotaДата: Пятница, 25 Февраля 2011, 10:46 | Сообщение # 217 | Тема: Рандомное движение
заслуженный участник
Сейчас нет на сайте
Если именно код нужен, посмотри эту статью про частицы, очень полезная:
http://gmakers.ru/index.php?topic=284.0


Новый пример инвентаря! /20.06.2012/

Energy Wars
Dva_KotaДата: Среда, 23 Февраля 2011, 15:12 | Сообщение # 218 | Тема: Energy Wars
заслуженный участник
Сейчас нет на сайте
ок, сделаю вариант с большей скоростью для всех: и для игрока и для врагов. На сколько скорость увеличить?

Новый пример инвентаря! /20.06.2012/

Energy Wars
Dva_KotaДата: Среда, 23 Февраля 2011, 14:18 | Сообщение # 219 | Тема: Energy Wars
заслуженный участник
Сейчас нет на сайте
Quote (Apelsinoviy_kot)
Сложновато. Добавить бы адреналина...

А можно подробнее?


Новый пример инвентаря! /20.06.2012/

Energy Wars
Dva_KotaДата: Среда, 23 Февраля 2011, 12:06 | Сообщение # 220 | Тема: Energy Wars
заслуженный участник
Сейчас нет на сайте
V1talik30, а в полноэкранном режиме тоже обрезается?
Apelsinoviy_kot, Ты прямо из архива запускал, не распаковывая? Если да, то это из-за внешних ресурсов.

Добавлено (23.02.2011, 12:06)
---------------------------------------------
Еще интересует такой вопрос: не слишком ли игра сложная? И кто что посоветует изменить/убрать/добавить?


Новый пример инвентаря! /20.06.2012/

Energy Wars
Поиск:

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