Вторник, 03 Декабря 2024, 21:35

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

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Помощь: Столкновение со стеной
123dima321Дата: Пятница, 31 Августа 2012, 10:28 | Сообщение # 1
почетный гость
Сейчас нет на сайте
Допустим у меня есть в игре два персонажа А и Б
Я создаю объекты стена1 и стена2

Как мне сделать такую функцию:
Объект А при столкновении со стеной1 полностью останавливался, не застревал, и спокойно проходил сквось стену2.
Объект Б при столкновении со стеной2 полностью останавливался, не застревал, и спокойно проходил сквось стену1.

Другими словами:
Для объекта А стена1 ТВЕРДАЯ, стена2 МЯГКАЯ.
Для объекта Б стена2 ТВЕРДАЯ, стена1 МЯГКАЯ.

Но самое главное, что мне нужно:
Объект А находясь между стеной1 при нажатии влево и вправо, не менял спрайтов, сквозь стену2 проходил спокойно.

Противоположные функции объекту Б.

У меня получается только сделать остановку объектов...
Вот пример:
Пример
Кто не понял вопроса? Пишите...


Сообщение отредактировал 123dima321 - Пятница, 31 Августа 2012, 10:37
ilgamerДата: Пятница, 31 Августа 2012, 14:26 | Сообщение # 2
Needle Games
Сейчас нет на сайте
Обе стены должны быть не твердыми, но в столкновение с нужной для каждого героя пишете:
move_contact_solid(direction,speed);
speed=0;


123dima321Дата: Пятница, 31 Августа 2012, 14:48 | Сообщение # 3
почетный гость
Сейчас нет на сайте
ilqamer, опробовал код, не подходит.
При столкновении объект только останавливается.
ilgamerДата: Пятница, 31 Августа 2012, 16:53 | Сообщение # 4
Needle Games
Сейчас нет на сайте
попробуй:

move_contact_solid(direction,0);
x = xprevious;
y=yprevious;


123dima321Дата: Суббота, 01 Сентября 2012, 08:15 | Сообщение # 5
почетный гость
Сейчас нет на сайте
Тоже самое(((
SkmaestroДата: Суббота, 01 Сентября 2012, 09:01 | Сообщение # 6
участник
Сейчас нет на сайте
Скрипт написал для 1 персонажа, ты там разберешься!
Можешь просто у второго изменить wall1 на wall2 в object2 step, и создай его еще конешно)
http://rghost.ru/40130335
Если не справишся пиши сделаю и второй!


Помог поставь +
Проект DeadWorldZ пока заморожен иными словами разрабатывается скрытно
Skype: Skmaestro867


Сообщение отредактировал Skmaestro - Суббота, 01 Сентября 2012, 09:03
123dima321Дата: Суббота, 01 Сентября 2012, 10:42 | Сообщение # 7
почетный гость
Сейчас нет на сайте
Хороший пример))) НО:
Мне нужно чтобы все объекты были мягкими, и только при соприкосновении становились твердыми.
Ну и после снова мягкими.
Остановку объектов я и сам могу сделать.
ВОТ САМОЕ ГЛАВНОЕ ЧТО МНЕ НУЖНО:

Объект А находясь между стеной1 при нажатии влево и вправо, не менял СПРАЙТОВ...
Аналогично между нижней и верхней стеной)))
ressДата: Суббота, 01 Сентября 2012, 13:32 | Сообщение # 8
постоянный участник
Сейчас нет на сайте
Quote (123dima321)
Мне нужно чтобы все объекты были мягкими, и только при соприкосновении становились твердыми.

Я не очень понял вопроса... Но вот, попробуй:
if distance_to_object(стена)>1 then стена мягкая else
стена твердая;


Я очень недоволен...
hero564Дата: Суббота, 01 Сентября 2012, 15:43 | Сообщение # 9
Made in Ukraine
Сейчас нет на сайте
123dima321, не в правильном направлении движешься , что легче проверять мягкость\твердость всех стен в комнате или изменять мягкость\твердость двух обьёктов в игре?
SaladinДата: Суббота, 01 Сентября 2012, 20:11 | Сообщение # 10
заслуженный участник
Сейчас нет на сайте
Quote (ilgamer)
x = xprevious;
y=yprevious;

Ответ прозвучал давным давно. Что вы тут обсуждаете до сих пор?


Анбаннэд. Хэлоу эгин =)
123dima321Дата: Суббота, 01 Сентября 2012, 20:44 | Сообщение # 11
почетный гость
Сейчас нет на сайте
Да я и имел в виду эти 4 объекта: "А", "Б", "Стена1", "Стена2".


У меня сейчас в игре так:
"А" при столкновении со "Стена2" просто останавливается.
"Б" при столкновении со "Стена1" тоже просто останавливается.


"А" при столкновении со "Стена2":


Объект "А" остановился, НО МНЕ НУЖНО: ЧТОБЫ КОГДА Я НАЖИМАЮ вверх, влево; ОБЪЕКТ "А" НЕ ДВИГАЛСЯ ВООБЩЕ, не менял спрайтов.

ТО ЕСТЬ так-же как и при столкновении с простой твердой стеной:


А у меня спрайты меняются(((



Короче, кратко:
"A" при столкновении со "Стена2", СТЕНА2 СТАНОВИЛАСЬ ТВЕРДОЙ, SOLID. (но для "Б" оставалась мягкой).

ЕСЛИ СЛИШКОМ НЕПОНЯТНЫЙ ВОПРОС,
то вот пример который на скринах:
Скачать
ilgamerДата: Вторник, 04 Сентября 2012, 11:23 | Сообщение # 12
Needle Games
Сейчас нет на сайте
Как сказал hero564: "Не в том направлении мыслишь". Придумай обходной путь, ибо зависнешь на этом!

Исправляю...
Лови:
Скачать

Короче, сделал только для A. Хорошо закомментировал. Думаю с Б сам справишься.
И еще, я случайно сделал проверку для стен 1, а не для 2. Измени их в комнате или поменяй именами эти стены

Всегда есть обходные пути!

P.S.
Бросай делать игры кнопками. Код позволяет делать больше. Ты потому и завис.

И еще...
Если я правильно представил себе игру которую ты хочешь сделать, то предлагаю запрещать двигать героя пока он не столкнулся со стеной.

Немного дополнишь мой код...

Code
if(keyboard_check(ord('W')))

заменишь на
Code
if(keyboard_check(ord('W')) && place_meeting(x,y+1,obj_wall1))


И так далее для каждого нажатия проверяешь, есть ли стена в нужном направлении или нет:

Code
else if(keyboard_check(ord('A')) && place_meeting(x+1,y,obj_wall1))

Code
else if(keyboard_check(ord('S')) && place_meeting(x,y-1,obj_wall1))

Code
else if(keyboard_check(ord('D')) && place_meeting(x-1,y,obj_wall1))


P.P.S.
Если тебе нужно менять спрайт, то используй sprite_index;
Как в Create объекта A, только поставь в Step там где нужно.

То есть, когда нажата W, нужно проверять, есть ли стена сверху:
Code
if (!place_meeting(x-1,y,obj_wall1)) then sprite_index = spr_A_left;

То есть стены нет, и мы меняем спрайт на нужный. А в конце Step добавь строку которая будет менять спрайт на "Герой стоит":
Code
sprite_index = spr_A;


Удачи с игрой!




Сообщение отредактировал ilgamer - Вторник, 04 Сентября 2012, 12:29
SkmaestroДата: Вторник, 04 Сентября 2012, 19:47 | Сообщение # 13
участник
Сейчас нет на сайте
хм, а разница то какая? и шрифт поставь пож ПОБОЛЬШЕ!, у меня зрение не очень!
Физики то нету, а если нету то там как-то на плевать перед или во время или после


Помог поставь +
Проект DeadWorldZ пока заморожен иными словами разрабатывается скрытно
Skype: Skmaestro867
ФломастерДата: Вторник, 04 Сентября 2012, 20:20 | Сообщение # 14
участник
Сейчас нет на сайте
Quote (Skmaestro)
хм, а разница то какая? и шрифт поставь пож ПОБОЛЬШЕ!, у меня зрение не очень!

Есть кнопочки Ctrl, C и V. Догадайся с трех раз, как их использовать.
TLTДата: Среда, 05 Сентября 2012, 03:28 | Сообщение # 15
Сейчас нет на сайте
Quote (123dima321)
Объект "А" остановился, НО МНЕ НУЖНО: ЧТОБЫ КОГДА Я НАЖИМАЮ вверх, влево; ОБЪЕКТ "А" НЕ ДВИГАЛСЯ ВООБЩЕ, не менял спрайтов.


Ну деактивируй его, замени на макет, например.


Дао, выраженное словами, не есть истинное Дао.
ilgamerДата: Четверг, 06 Сентября 2012, 09:34 | Сообщение # 16
Needle Games
Сейчас нет на сайте
я все еще делаю тебе рабочий пример, 123dima321. Шрифт изменил чтобы не читал, поэтому не ругайтесь на него, я в каком-то роде виноват.
Короче, движение реализовал, не застревают и т.д. но уже забыл в чем были баги, поэтому как проверю код и программу в целом, сразу дам с четким описанием. Мне когда-то не помогали. -_-


123dima321Дата: Четверг, 06 Сентября 2012, 11:51 | Сообщение # 17
почетный гость
Сейчас нет на сайте
Главная проблема которую не удается исправить:
"A" при столкновении со "Стена2", СТЕНА2 СТАНОВИЛАСЬ ТВЕРДОЙ, SOLID. (но для "Б" оставалась мягкой).
ilgamerДата: Суббота, 08 Сентября 2012, 06:53 | Сообщение # 18
Needle Games
Сейчас нет на сайте
Короче, обе стены твердые. И суть не в том, чтобы менять их свойства, а в том, чтобы проверять столкновение. Если я Объекту "А" не говорил втыкаться носом в стену 2, то он этого делать не будет, если объекты не твердые. Если они твердые, то он в ней застрянет, ибо назначая это свойство объекту, вы обрекаете его подчиняться законам "псевдо-" физики.

Короче, лови работающий пример:
Клац

Я убрал твои спрайты потому что ни были ужасны. smile
Код у объектов практически одинаковый. Единственное что изменилось для объекта "Б" это столкновение с другой стеной и проверка клавиш: мы проверяем нажатие с трелок (vk_left, vk_right и т.д.).
Что тебе нужно сделать:

Во-первых, поставить свои спрайты. В коде, в структуре Switch изменить смену спрайтов на необходимые.
Во-вторых, изменить спрайт при столкновении со стеной (равносильно остановке). Сделай это в столкновении со стеной и стеной 1/2.
Там есть строка:
Code
sprite_index = spr_stand;


В общем-то все. Если есть вопросы, спрашивай!
И удачи!




Сообщение отредактировал ilgamer - Суббота, 08 Сентября 2012, 07:00
123dima321Дата: Суббота, 08 Сентября 2012, 17:10 | Сообщение # 19
почетный гость
Сейчас нет на сайте
ilgamer, Спасибо за помощь))) cool
Позже начну внедрять твой движок в свою игру...


Сообщение отредактировал 123dima321 - Суббота, 08 Сентября 2012, 17:12
ilgamerДата: Понедельник, 10 Сентября 2012, 08:40 | Сообщение # 20
Needle Games
Сейчас нет на сайте
Движок?) Хах))

  • Страница 1 из 1
  • 1
Поиск:

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