Автор Тема: Соприкосновение объекта с землёй  (Прочитано 818 раз)

Оффлайн Prographer

  • Прохожий
  • *
  • Сообщений: 89
  • Репутация: +7/-0
  • Говнокодим, грабим, убиваем
    • Просмотр профиля
Всем привет! Недавно начал писать новый скрипт и появилась необходимость как-то исхитриться и проверить то, соприкоснулся объект с землёй или нет. Коли нет такого опкода, решил пойти по пути изменения координат, но почему-то тоже не вышло. Подскажите, как это сделать?

Оффлайн xanser

  • Главный Модератор
  • Опытный
  • *****
  • Сообщений: 494
  • Репутация: +42/-0
  • Есть такая профессия - на работе сидеть
    • Просмотр профиля
Пробовал проверять разницу между координатой Z объекта и координатой Z-ground под объектом?

Оффлайн Shagg_E

  • Опытный
  • **
  • Сообщений: 480
  • Репутация: +14/-0
  • Изобретательный Рукожопъ
    • Просмотр профиля
    • NewRockstar
Если объект динамический(прописан в object.dat, имеет коллизию из шаров) - можно проверять, соприкоснулся ли объект с землей так:
Сначала, перед циклом проверки, нужно врубить это:
04D9: object $TELO set_scripted_collision_check 1 // тут, думаю, всё понятно - без включения этой опции нельзя будет проверить касание объекта $TELO до чего-либоВ цикле проверки проверять касание земли так:
04DA:   has_object $TELO collided Когда закончили - вырубить проверку(если в дальнейшем нам объект еще понадобится)
04D9: object $TELO set_scripted_collision_check 0
P.S. переменная у меня глобальная, т.к. код выдран из мэйна. Если работаешь с CLEO - юзай локальные.

Оффлайн Prographer

  • Прохожий
  • *
  • Сообщений: 89
  • Репутация: +7/-0
  • Говнокодим, грабим, убиваем
    • Просмотр профиля
Если объект динамический(прописан в object.dat, имеет коллизию из шаров) - можно проверять, соприкоснулся ли объект с землей так:
Сначала, перед циклом проверки, нужно врубить это:
04D9: object $TELO set_scripted_collision_check 1 // тут, думаю, всё понятно - без включения этой опции нельзя будет проверить касание объекта $TELO до чего-либоВ цикле проверки проверять касание земли так:
04DA:   has_object $TELO collided Когда закончили - вырубить проверку(если в дальнейшем нам объект еще понадобится)
04D9: object $TELO set_scripted_collision_check 0
P.S. переменная у меня глобальная, т.к. код выдран из мэйна. Если работаешь с CLEO - юзай локальные.
Я так понимаю, вот так?
Object.Create(5@, 345, 0@, 1@, 2@)
04D9: object 5@ set_scripted_collision_check 1
while 04DA: has_object 5@ collided
    wait 0
    /* какой-то_код */
end
[условие выполнено]

Оффлайн DK

  • Новичек
  • **
  • Сообщений: 212
  • Репутация: +311/-0
    • dk22pac
    • Просмотр профиля
У CPhysical есть метод GetHasCollidedWith(), который проверяет соприкосновение с другим обьектом.
Plugin-SDK
gta_sa.idb
Skype-конференция по моддингу https://join.skype.com/jqGbs97avigh

Оффлайн Shagg_E

  • Опытный
  • **
  • Сообщений: 480
  • Репутация: +14/-0
  • Изобретательный Рукожопъ
    • Просмотр профиля
    • NewRockstar
Я так понимаю, вот так?
Object.Create(5@, 345, 0@, 1@, 2@)
04D9: object 5@ set_scripted_collision_check 1
while 04DA: has_object 5@ collided
    wait 0
    /* какой-то_код */
end
[условие выполнено]
Ну, я не люблю такой вид кода, но вроде правильно...

У CPhysical есть метод GetHasCollidedWith(), который проверяет соприкосновение с другим обьектом.
Шик, вот про это не знал)

Оффлайн Prographer

  • Прохожий
  • *
  • Сообщений: 89
  • Репутация: +7/-0
  • Говнокодим, грабим, убиваем
    • Просмотр профиля
Цитировать
Я так понимаю, вот так?
Object.Create(5@, 345, 0@, 1@, 2@)
04D9: object 5@ set_scripted_collision_check 1
while 04DA: has_object 5@ collided
    wait 0
    /* какой-то_код */
end
[условие выполнено]
Ну, я не люблю такой вид кода, но вроде правильно...
А как бы ты написал?

Оффлайн Shagg_E

  • Опытный
  • **
  • Сообщений: 480
  • Репутация: +14/-0
  • Изобретательный Рукожопъ
    • Просмотр профиля
    • NewRockstar
А как бы ты написал?
Ну, типа такого:
Object.Create(5@, 345, 0@, 1@, 2@)
04D9: object 5@ set_scripted_collision_check 1

:Ololo
wait 0
if
04DA: has_object 5@ collided
jf @Ololo
код
и если снова понадобится чекать, то
04D9: object 5@ set_scripted_collision_check 0
wait 0
04D9: object 5@ set_scripted_collision_check 1
jump @Ololo

Оффлайн Prographer

  • Прохожий
  • *
  • Сообщений: 89
  • Репутация: +7/-0
  • Говнокодим, грабим, убиваем
    • Просмотр профиля
Ну, типа такого:
Object.Create(5@, 345, 0@, 1@, 2@)
04D9: object 5@ set_scripted_collision_check 1

:Ololo
wait 0
if
04DA: has_object 5@ collided
jf @Ololo
код
и если снова понадобится чекать, то
04D9: object 5@ set_scripted_collision_check 0
wait 0
04D9: object 5@ set_scripted_collision_check 1
jump @Ololo
Не знаю. Такой вариант, конечно, типичен для Cleo-синтаксиса, но его не удобно читать, по крайней мере мне.

Оффлайн Shagg_E

  • Опытный
  • **
  • Сообщений: 480
  • Репутация: +14/-0
  • Изобретательный Рукожопъ
    • Просмотр профиля
    • NewRockstar
Не знаю. Такой вариант, конечно, типичен для Cleo-синтаксиса, но его не удобно читать, по крайней мере мне.
Ну - это дело вкуса) Я просто и не пишу по-другому, поэтому за правильность твоего варианта не смогу поручиться(я просто не шарю в этом)