Проблема со стенами.
|
|
|
TimKruz | Дата: Четверг, 03 Ноября 2011, 18:39 | Сообщение # 2 |
старожил
Сейчас нет на сайте
| Просто у тебя в step'е стоит код поворота, который обрабатывается вне зависимости от наличия столкновения. Проверяй столкновение (и скорость<>0) здесь: Quote if (keyboard_check(vk_left) and блаблабла) {image_angle+=5}
if (keyboard_check(vk_right) and блаблабла) {image_angle-=5}} } Чтобы сделать задний ход, просто делай проверку. Если (скорость = 0) и (нажата кнопка "назад") то присвоить скорости значение -8.
*** Сейчас попробую исправить твой код и здесь допишу...
Сообщение отредактировал TimKruz - Четверг, 03 Ноября 2011, 18:44 |
|
| |
|
TimKruz | Дата: Четверг, 03 Ноября 2011, 18:47 | Сообщение # 4 |
старожил
Сейчас нет на сайте
| GAZ777, о, я разобрался. Ты там со скобками нафигачил. Замени код в step на: Code if keyboard_check(vk_down) {speed=-8 direction=image_angle} if keyboard_check_released(vk_down) {speed=0}
if keyboard_check(vk_up) { if keyboard_check(vk_left) {image_angle+=5} if keyboard_check(vk_right) {image_angle-=5} speed=8 direction=image_angle } if keyboard_check_released(vk_up) {speed=0} И всё работает. *** Quote (GAZ777) if keyboard_chek(vk_left) and not столкновоние со стеной? Не, это уже не надо, я по-другому сделал. :D
*** А, не, вот так лучше будет (поворачивает задом): Code if keyboard_check(vk_down) {speed=-8 direction=image_angle} if keyboard_check_released(vk_down) {speed=0}
if keyboard_check(vk_up) { speed=8 direction=image_angle }
if (keyboard_check(vk_left) and speed<>0) {image_angle+=5} if (keyboard_check(vk_right) and speed<>0) {image_angle-=5}
if keyboard_check_released(vk_up) {speed=0} Однако, если нажать одновременно вперёд или назад и влево или вправо, то всё равно в стенке поворачивает. Нужно проверять столкновение.
Сообщение отредактировал TimKruz - Четверг, 03 Ноября 2011, 18:51 |
|
| |
|
TimKruz | Дата: Четверг, 03 Ноября 2011, 18:52 | Сообщение # 6 |
старожил
Сейчас нет на сайте
| GAZ777, как в коде GML проверять столкновение, знаешь? *** Вот: http://rghost.ru/28392111. Только проверку столкновений добавь.
Сообщение отредактировал TimKruz - Четверг, 03 Ноября 2011, 18:57 |
|
| |
GAZ777 | Дата: Четверг, 03 Ноября 2011, 18:59 | Сообщение # 7 |
участник
Сейчас нет на сайте
| TimKruz, да, эт я знаю Добавлено (03.11.2011, 18:59) --------------------------------------------- TimKruz, спасибо
<-- КЛИКНИ! Ты поможешь ему вырасти.
Invincible Tanks
Сообщение отредактировал GAZ777 - Четверг, 03 Ноября 2011, 18:59 |
|
| |
CHROM | Дата: Четверг, 03 Ноября 2011, 21:34 | Сообщение # 8 |
частый гость
Сейчас нет на сайте
| Вот глянь ... залил на RGhost мож норм?
+ CHROM +
|
|
| |
TimKruz | Дата: Четверг, 03 Ноября 2011, 21:43 | Сообщение # 9 |
старожил
Сейчас нет на сайте
| Quote (CHROM) Вот глянь ... залил на RGhost мож норм? У тебя поворот работает только когда вперёд едешь и машина совсем застревает (задний ход не работает), если врезаться в стену. А плавное ускорение и торможение легко сделать. Кстати, GAZ777, чтобы машина не застревала совсем, можно при обнаружении столкновения, например, менять вектор скорости на противоположный, типа машина врезалась и оттолкнулась от стены, и потом останавливать. Либо отодвигать на несколько пикселей назад.
Сообщение отредактировал TimKruz - Четверг, 03 Ноября 2011, 21:43 |
|
| |
|
TimKruz | Дата: Пятница, 04 Ноября 2011, 13:04 | Сообщение # 11 |
старожил
Сейчас нет на сайте
| Quote (GAZ777) я правильно понял? Да, но перед тем как делать 0, подождать несколько миллисекунд (чтобы успела откатиться). Но это будет только если машина не "наехала" на другой объект (т.е. не застряла на нём)... Если уже "наехала" - то тут надо не скорость менять, а принудительно сдвигать обратно... Но если всё правильно сделать, "наезжать" не должна... Quote (GAZ777) if (keyboard_check(vk_right) and speed<>0) and not collision_point(....) - так? Если функция collision_point возвращает true при наличии столкновения между двумя объектами, то да, именно так. Только я со скобками запутался... Наверное, так скобки расставить: Quote if (keyboard_check(vk_right) and (speed<>0) and not collision_point(...)) Просто я не уверен, какой приоритет логических операций в GML... А от порядка действий зависит результат.
|
|
| |
GAZ777 | Дата: Пятница, 04 Ноября 2011, 13:17 | Сообщение # 12 |
участник
Сейчас нет на сайте
| Quote (TimKruz) перед тем как делать 0, подождать несколько миллисекунд да я поставил аларм на 100мл.
Quote (TimKruz) if (keyboard_check(vk_right) and (speed<>0) and not collision_point(...)) так делать нелзя, так как между ними стоит AND. это два отдельных условия.
Quote (TimKruz) Просто я не уверен, какой приоритет логических операций в GML... ты GML не изучаешь?Добавлено (04.11.2011, 13:17) --------------------------------------------- проверка не помогает, если нажать две клавиши одновременно, то всё равно заходит в стену.
<-- КЛИКНИ! Ты поможешь ему вырасти.
Invincible Tanks
|
|
| |
GameMix | Дата: Пятница, 04 Ноября 2011, 13:49 | Сообщение # 13 |
старожил
Сейчас нет на сайте
| Quote (TimKruz) Просто я не уверен, какой приоритет логических операций в GML... А от порядка действий зависит результат. В GML в сложном условии с and'ами проверяются по очереди все выражения, при первом же ложном значении выражения условие прерывается, возвращая ложь.
Steel Standoff - 2D аркада. Мои статьи
|
|
| |
TimKruz | Дата: Пятница, 04 Ноября 2011, 16:08 | Сообщение # 14 |
старожил
Сейчас нет на сайте
| Quote (GAZ777) ты GML не изучаешь? Нет. Но тут не нужно иметь глубоких знаний в языке... GameMix, я имел в виду то, что "not" должен выполняться раньше "and", а "<>" - позже "and". Или в GML по-другому? Quote (GAZ777) проверка не помогает, если нажать две клавиши одновременно, то всё равно заходит в стену. У тебя speed<>0, как только нажимается кнопка, в не зависимости от столкновения со стеной. Там тоже надо добавить условие, что изменяем скорость, только если нет соприкосновения со стеной... (т.е. на vk_up и vk_down) У меня есть подозрение, что ты неправильно используешь collision_point(...). Получается, эта функция у тебя всё время возвращает false. Тогда получаем «истина (нажата кнопка поворота) и истина (нажата кнопка движения => получили speed<>0) и не ложь (не знаю, почему)»...
|
|
| |
GAZ777 | Дата: Пятница, 04 Ноября 2011, 16:11 | Сообщение # 15 |
участник
Сейчас нет на сайте
| Quote (TimKruz) У меня есть подозрение, что ты неправильно используешь collision_point(...).
дак напиши весь код collisionа. я проверю
<-- КЛИКНИ! Ты поможешь ему вырасти.
Invincible Tanks
|
|
| |