Результаты поиска
| |
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) --------------------------------------------- но здесь условие будет выполняться и если второй объект находится под первым. Если это имеет значение, добавь еще одну проверку: сравнивай игрики:
Новый пример инвентаря! /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) { //Здесь код переключения на следующее оружие (написан выше) } Тут будет одна проблема: если закончатся все патроны начнется переключение оружия по кругу без остановки - будет постоянно выполняться цикл и игра зависнет. Чтобы этого не было нужно сделать одно оружие с бесконечными патронами (или, если нужно чтобы игрок мог остаться без оружия, сделать оружие без спрайта и с одним патроном, а так же запретить стрелять из него - перед выстрелом проверять номер оружия, и если это оружие номер ... не создавать пулю). Можно сделать например нож - у него будут бесконечные "патроны".
Новый пример инвентаря! /20.06.2012/
Energy Wars
Сообщение отредактировал Dva_Kota - Понедельник, 24 Января 2011, 09:48 |
|
| |
Dva_Kota | Дата: Пятница, 21 Января 2011, 16:33 | Сообщение # 268 | Тема: Подставление спрайтов |
заслуженный участник
Сейчас нет на сайте
| Можно сделать несколькими объектами, но не знаю будет ли это лучшим решением (скорее наоборот). Есть еще один вариант. Сейчас почитаю справку и расскажу. Добавлено (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 | Тема: Урон по времени... |
заслуженный участник
Сейчас нет на сайте
| События монстра: событие "создание": событие 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 | Тема: Пару "платформерных" вопросов. |
заслуженный участник
Сейчас нет на сайте
| Это приблизительный код, я его не проверял. А вообще это лучше частицами делать, а объект "игрок" при столкновении я заменял бы на объект "мертвый игрок", у которого не было бы столкновения.
Новый пример инвентаря! /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:
Новый пример инвентаря! /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 | Тема: Кости |
заслуженный участник
Сейчас нет на сайте
| Это понятно. Тебе нужно чтобы каждая часть тела отдельно взаимодействовала с другими объектами (типо физическая модель человека)?
Новый пример инвентаря! /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
|
|
| |
|