Суббота, 30 Ноября 2024, 09:26

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

[ Новые сообщения · Игроделы · Правила · Поиск ]
Результаты поиска
Dva_KotaДата: Вторник, 25 Января 2011, 09:11 | Сообщение # 261 | Тема: Вопрос - Ответ (Game Maker)
заслуженный участник
Сейчас нет на сайте
Функция выглядит так:
collision_line(x1,y1,x2,y2,obj,prec,notme)

Тебе нужно

Code
collision_line(x,y,x,0,obj_который_должен_быть_над_данным_объектом,true,true)

Но, я думаю, это не та функция, которая тебе нужна - здесь проверка выполнится только в том случае, если второй объект будет над центром первого (хотя бы часть объекта будет над центром первого). Т.е. если небольшая часть второго объекта, будет над "краем" первого - будет считаться что он еще не над ним.
Хотя можно и с помощью этой функции сделать проверку, но нужно проверять два раза - одна линия слева от объекта, другая - справа. Но если второй объект значительно меньше первого этот способ не подойдет - второй объект при движении может "проскочить" линию и функция не сработает.

делать нужно так (если центр спрайта первого объекта находится в центре):

Code
collision_line(x-ширина_оъекта/2,y,x-ширина_оъекта/2,0,obj_который_должен_быть_над_данным_объектом,true,true)
collision_line(x+ширина_оъекта/2,y,x+ширина_оъекта/2,0,obj_который_должен_быть_над_данным_объектом,true,true)


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

Energy Wars
Dva_KotaДата: Понедельник, 24 Января 2011, 13:58 | Сообщение # 262 | Тема: Вопрос - Ответ (Game Maker)
заслуженный участник
Сейчас нет на сайте
аТнОтХоАн, нужно проверять в end step

p.s.: я, почему-то подумал что это TDS, из-за этого не сразу понял что значит "над объектом".

Добавлено (24.01.2011, 13:55)
---------------------------------------------
А вообще можно сделать так: Проверять столкновение через place_meeting(x,y,obj) вот таким образом в шаге врага (проверять есть ли под ним игрок):

Code
if (place_meeting(x,obj_игрок.y,obj_игрок))
{
//что делать если под врагом игрок?
}

Добавлено (24.01.2011, 13:58)
---------------------------------------------
но здесь условие будет выполняться и если второй объект находится под первым. Если это имеет значение, добавь еще одну проверку: сравнивай игрики:

Code
if (y-obj_игрок.y)<0


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

Energy Wars


Сообщение отредактировал Dva_Kota - Понедельник, 24 Января 2011, 13:56
Dva_KotaДата: Понедельник, 24 Января 2011, 13:08 | Сообщение # 263 | Тема: Вопрос - Ответ (Game Maker)
заслуженный участник
Сейчас нет на сайте
Все равно ничего не понятно... Тебе нужно проверить столкновение, но только если второй объект имеет меньшую глубину? Или глубина здесь не при чем?

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

Energy Wars
Dva_KotaДата: Понедельник, 24 Января 2011, 12:03 | Сообщение # 264 | Тема: HUD
заслуженный участник
Сейчас нет на сайте
Вот пример. Сделал два варианта. Наверное тебе нужен самый последний:

http://rghost.ru/4057673


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

Energy Wars
Dva_KotaДата: Понедельник, 24 Января 2011, 11:32 | Сообщение # 265 | Тема: HUD
заслуженный участник
Сейчас нет на сайте
попробуй поменять местами
165 и -((global.hp/global.maxhp)*165)

если не поможет - убери минус перед ((global.hp/global.maxhp)*165) (после того как поменяешь местами)


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

Energy Wars
Dva_KotaДата: Понедельник, 24 Января 2011, 10:25 | Сообщение # 266 | Тема: Вопрос - Ответ (Game Maker)
заслуженный участник
Сейчас нет на сайте
Не совсем понятно что значит "расстояние над объектом"...
Наверное тебе нужно это:
Quote
place_empty(x,y) Возвращает истину, если с экземпляром объекта, помещённым в точку с координатами (x,y) не происходит вообще никаких столкновений.


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

Energy Wars
Dva_KotaДата: Понедельник, 24 Января 2011, 09:47 | Сообщение # 267 | Тема: Архив с вопросами
заслуженный участник
Сейчас нет на сайте
Можно сделать короче: Занести всё оружие и все патроны в массивы.

Событие Создание

Code

//Список оружия (спрайтов)
weapon[1]=spr_weapon_01;
weapon[2]=spr_weapon_02;
weapon[3]=spr_weapon_03;
weapon[4]=spr_weapon_04;

//количество патронов
ammo[1]=30;
ammo[2]=20;
ammo[3]=0;
ammo[4]=10;

//список объектов-пуль
bullet[1]=obj_bullet_01;
bullet[2]=obj_bullet_02;
bullet[3]=obj_bullet_03;
bullet[4]=obj_bullet_04;

//Номер оружия, которое будет по умолчанию (не путать с массивом weapon[]? это не одно и то же!)
weapon=1;

событие "колесо мышки вверх" //Переключение не предыдущее оружие

Code
    {
      if weapon>1
          {
          weapon-=1
          while (ammo[weapon]=0)
              {
              if weapon>1 weapon-=1 else weapon=4
              }
          }
      else
          {
          weapon=4
          while (ammo[weapon]=0)
              {
              if weapon>1 weapon-=1 else weapon=4
              }
          }
      //здесь меняем спрайт оружия
      }

Событие "колесо мышки вниз" //Переключение на следующее оружие

Code
    {
      if weapon<4
          {
          weapon+=1
          while (ammo[weapon]=0)
              {
              if weapon<4 weapon+=1 else weapon=1
              }
          }
      else
          {
          weapon=1
          while (ammo[weapon]=0)
              {
              if weapon<4 weapon+=1 else weapon=1
              }
          }
меняем спрайт оружия на спрайт weapon[weapon]
      }

В событиях "смены оружия", везде где стоит 4 нужно ставить количество видов оружия (максимальный номер оружия).

Когда создаешь пулю (стреляешь) создавай объект с именем bullet[weapon], например

Code
instance_create(x,y,bullet[weapon]);

Можно еще сделать чтобы когда патроны закончились было автоматическое переключение на следующее оружие. Для этого нужно в шаг добавить код:

Code
if (ammo[weapon]=0)
{
//Здесь код переключения на следующее оружие (написан выше)
}

Тут будет одна проблема: если закончатся все патроны начнется переключение оружия по кругу без остановки - будет постоянно выполняться цикл и игра зависнет. Чтобы этого не было нужно сделать одно оружие с бесконечными патронами (или, если нужно чтобы игрок мог остаться без оружия, сделать оружие без спрайта и с одним патроном, а так же запретить стрелять из него - перед выстрелом проверять номер оружия, и если это оружие номер ... не создавать пулю). Можно сделать например нож - у него будут бесконечные "патроны". biggrin


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

Energy Wars


Сообщение отредактировал Dva_Kota - Понедельник, 24 Января 2011, 09:48
Dva_KotaДата: Пятница, 21 Января 2011, 16:33 | Сообщение # 268 | Тема: Подставление спрайтов
заслуженный участник
Сейчас нет на сайте
Можно сделать несколькими объектами, но не знаю будет ли это лучшим решением (скорее наоборот).
Есть еще один вариант. Сейчас почитаю справку и расскажу. wink

Добавлено (21.01.2011, 16:33)
---------------------------------------------
Оптимальный способ, думаю, такой:
Создаешь кучу спрайтов ("голый" игрок", куча разных "шапок", "штанов" и т.д.). Когда тебе нужно "одеть" игроку шапку выполняешь следующие действия:
Берешь поверхность, на нее рисуешь спрайт игрока, потом, сверху, спрайт шапки. Затем создаешь новый спрайт из этой поверъхности с помощью функции

Quote
sprite_create_from_surface(id,x,y,w,h,removeback,smooth,xorig,yorig) Создает спрайт, скопировав данную область с указанного сурфейса. removeback указывает, следует ли сделать все пиксели с цветом фона (левый нижний пиксель) прозрачным. smooth указывает на гладких границ. Эта функция дает возможность создавать любые спрайты, какие Вам потребуются. Нарисуйте изображение на сурфейс с помощью функций рисования и в дальнейшем создайте спрайт из него. Эта функция возвращает индекс нового спрайта. Обратите внимание, что значения альфа прозрачности тоже сохраняются в спрайт.

Ставишь этот спрайт игроку. То же самое можно делать с остальными вещами. Только не забывай удалять спрайты которые были созданы раньше (например одел игроку красную шапку, потом одеваешь синюю, а спрайт "игрок в красной шапке" удаляешь). Надеюсь принцип понятен.


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

Energy Wars
Dva_KotaДата: Четверг, 20 Января 2011, 17:34 | Сообщение # 269 | Тема: Урон по времени...
заслуженный участник
Сейчас нет на сайте
События монстра:
событие "создание":
Code
alarm[0]=1;

событие alarm0:
Code
if (place_meeting(x,y,obj_player))
     {
     obj_player.hp-=10;
     }
alarm[0]=90;//3 секунды это 3*скорость_комнаты. По умолчанию скорость комнаты - 30

obj_player это объект "игрок", hp - здоровье игрока


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

Energy Wars
Dva_KotaДата: Четверг, 20 Января 2011, 12:46 | Сообщение # 270 | Тема: Кости
заслуженный участник
Сейчас нет на сайте
lengthdir_x(len,dir) Возвращает горизонтальный x-компонент вектора, определённого длиной len и направлением dir.

То есть, это длинна проекции вектора, с длинной len и углом наклона к оси х dir на ось х.
Аналогично с lengthdir_y(len,dir).


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

Energy Wars
Dva_KotaДата: Четверг, 20 Января 2011, 11:44 | Сообщение # 271 | Тема: Кости
заслуженный участник
Сейчас нет на сайте
Тогда то что я писал в начале: через lengthdir_x и lengthdir_y.

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

Energy Wars
Dva_KotaДата: Четверг, 20 Января 2011, 09:50 | Сообщение # 272 | Тема: Кости
заслуженный участник
Сейчас нет на сайте
Ну я примерно о том же, только предлагаю рисовать все эти спрайты в draw - чтобы был только один объект. Но мне кажется ему не совсем это нужно...

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

Energy Wars
Dva_KotaДата: Четверг, 20 Января 2011, 09:46 | Сообщение # 273 | Тема: Пару "платформерных" вопросов.
заслуженный участник
Сейчас нет на сайте
Это приблизительный код, я его не проверял. smile
А вообще это лучше частицами делать, а объект "игрок" при столкновении я заменял бы на объект "мертвый игрок", у которого не было бы столкновения.


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

Energy Wars
Dva_KotaДата: Четверг, 20 Января 2011, 09:29 | Сообщение # 274 | Тема: Пару "платформерных" вопросов.
заслуженный участник
Сейчас нет на сайте
В событии "столкновение с определенным блоком" создавай несколько объектов, которые будут разлетаться и задавай alarm[0]=2*скорость_комнаты
В событии alarm0 делай рестарт комнаты.

В событии "столкновение":

Code
repeat (6) //количество создаваемых объектов
{
bl=instance_create(x,y,имя_объекта_который_создается);
bl.direction=random(360);
bl.speed=random_range(1,3);
}
alarm[0]=60;//скорость комнаты по умолчанию 30.   2*30=60

в событии alarm0:

Code
room_restart();


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

Energy Wars


Сообщение отредактировал Dva_Kota - Четверг, 20 Января 2011, 09:30
Dva_KotaДата: Четверг, 20 Января 2011, 09:16 | Сообщение # 275 | Тема: Кости
заслуженный участник
Сейчас нет на сайте
Ну если только раскрашивать, тогда лучше все равно в драв делать, я думаю.

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

Energy Wars
Dva_KotaДата: Среда, 19 Января 2011, 13:50 | Сообщение # 276 | Тема: Кости
заслуженный участник
Сейчас нет на сайте
Опиши подробнее что именно ты хочешь сделать.

Вот есть пример, здесь реализована физика после смерти, может поможет чем-то:
http://www.game-maker.ru/infusions/pro_download_panel/download.php?did=789

Добавлено (19.01.2011, 13:50)
---------------------------------------------
Вот еще пример (если у тебя ГМ 8 измени скрипт XeMaterialLoad - там в функции background_add() убери последний ноль):
http://www.game-maker.ru/infusions/pro_download_panel/download.php?did=785


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

Energy Wars
Dva_KotaДата: Среда, 19 Января 2011, 12:57 | Сообщение # 277 | Тема: Кости
заслуженный участник
Сейчас нет на сайте
Это понятно. smile
Тебе нужно чтобы каждая часть тела отдельно взаимодействовала с другими объектами (типо физическая модель человека)?


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

Energy Wars
Dva_KotaДата: Среда, 19 Января 2011, 10:26 | Сообщение # 278 | Тема: Кости
заслуженный участник
Сейчас нет на сайте
Можно привязать объекты последовательно друг к другу через lengthdir_x. Но можно сделать все одним объектом, рисуя разные спрайты в событии рисования тоже привязав их друг к другу. А маску одну для этого объекта сделать. Так должно работать быстрее чем куча объектов. Но все зависит от того что именно нужно сделать автору (для чего ему нужна костная анимация).

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

Energy Wars
Dva_KotaДата: Среда, 19 Января 2011, 10:21 | Сообщение # 279 | Тема: Объект за мышкой
заслуженный участник
Сейчас нет на сайте
Сравниваешь координаты мышки и игрока:
Code
x_i=x-mouse_x;
y_i=y-mouse_y;

Потом проверяешь где находится мышь относительно игрока и перемещаем.
Код в степ объекта такой:
Code

x_i=x-mouse_x;
y_i=y-mouse_y;

if x_i>3//здесь должно быть число, модуль которого равен скорсоти
     {
     motion_set(180,3);
     }
else
     {
     if x_i<-3
         {
         motion_set(0,3);
         }
     else
         {
         x=mouse_x;//это чтобы объект не дергался когда дойдет до указателя мышки
         if y_i<-3
             {
             motion_set(270,3);
             }
         else
             {
             if y_i>3
                 {
                 motion_set(90,3);
                 }
             else
                 {
                 y=mouse_y;//это чтобы объект не дергался когда дойдет до указателя мышки
                 }
             }
         }
     }

Здесь сначала перемещаем объект по х, потом по у. Можно сделать наоборот.


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

Energy Wars
Dva_KotaДата: Среда, 19 Января 2011, 09:31 | Сообщение # 280 | Тема: Кости
заслуженный участник
Сейчас нет на сайте
Apelsinoviy_kot, смотри ЛС

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

Energy Wars
Поиск:

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