
^ Начало
Скрипт движения платформы
Свойства:
•Range (строка, скрипт конвертирует в вектор) - Диапазон движения. 3 числа через запятую с пробелом.
•Time (целое число) - Время прохождения диапазона (в логических тиках).
•Pause (целое число) - Время ожидания перед возвратом (в логических тиках).
Сенсоры:
•Always (импульсный режим)
•Collision (назвать Coll) - если подключить этот сенсор, включается костыль для удержания объектов на платформе. (На Character не действует!)
Актуаторы:
Любые. Для активации во время движения, перед именем актуатора дописать "Move", для разовой активации при остановке - "Stop" (Например "Move_Sound" или "StopSound").
Скрипт:
platform.blend
Свойства:
•Range (строка, скрипт конвертирует в вектор) - Диапазон движения. 3 числа через запятую с пробелом.
•Time (целое число) - Время прохождения диапазона (в логических тиках).
•Pause (целое число) - Время ожидания перед возвратом (в логических тиках).
Сенсоры:
•Always (импульсный режим)
•Collision (назвать Coll) - если подключить этот сенсор, включается костыль для удержания объектов на платформе. (На Character не действует!)
Актуаторы:
Любые. Для активации во время движения, перед именем актуатора дописать "Move", для разовой активации при остановке - "Stop" (Например "Move_Sound" или "StopSound").
Скрипт:
############################################### #Copyright © 2017 Владас. All rights reserved.# #License: http://opensource.org/licenses/MIT # ############################################### from bge import logic as G from mathutils import Vector as vec cont = G.getCurrentController() own = cont.owner spd = own.get('Time', 60) paus = own.get('Pause', 30) active = [sens.positive for sens in cont.sensors if sens.name != 'Coll'] if not False in active: if own.get('cyc', -paus) <= -paus: own['cyc'] = spd own['clist'] = [] if not 'shag' in own: rang = vec([float(i) for i in own.get('Range', "1, 1, 1").split(', ')]) own['shag'] = rang / spd else: own['shag'] *= -1 if own['cyc'] > 0: own.worldPosition += own['shag'] for act in cont.actuators: if act.name[0:4] == 'Move': cont.activate(act) elif act.name[0:4] == 'Stop': cont.deactivate(act) elif own['cyc'] == 0: for act in cont.actuators: if act.name[0:4] == 'Move': cont.deactivate(act) elif act.name[0:4] == 'Stop': cont.activate(act) if 'Coll' in cont.sensors and own['cyc'] >= 0: coll = cont.sensors['Coll'] znk = (own['cyc'] > 0) * 2 - 1 for obj in coll.hitObjectList: if (znk > 0 and obj not in own['clist']) or (znk < 0 and obj in own['clist']): vel = obj.getLinearVelocity(False) + (own['shag'] * 60 * znk) obj.setLinearVelocity(vel, False) own['clist'].append(obj) own['cyc'] -= 1Blend:
platform.blend
Платформа ездит, а игрок стоит... вот то беда
! А потом упадет - и еще больше беда
И если бы в свойстве Range прописывалось направление только в одну сторону, а не от центра + -, еще бы лучше было бы.
А если прописать звук цикличный, и паузу при остановке - ну просто Портал, и все.
platform_test.blend


И если бы в свойстве Range прописывалось направление только в одну сторону, а не от центра + -, еще бы лучше было бы.
А если прописать звук цикличный, и паузу при остановке - ну просто Портал, и все.

platform_test.blend
Про игрока - это беда физики, сам вчера в очередной раз разочаровался (скрипт то для игры с платформами делал), сейчас думаю как это править (тут без костылей для игрока не обойтись
).

И если бы в свойстве Range прописывалось направление только в одну сторону, а не от центра + -Незнаю зачем я сделал именно [центр>начало>конец>начало...], может быть было бы лучше [начало>конец>начало...]. На этот скрипт меня подтолкнул стандартный пример платформера в godot, и там платформы двигались от центра, я ориентировался на это

А если прописать звук цикличный, и паузу при остановкеЕсть идея! Добавил активацию всех актуаторов подключенных к скрипту когда платформа движется, теперь можно просто добавить актуатор Sound с нужным цикличным звуком

Николай:
Про игрока - это беда физики, сам вчера в очередной раз разочаровался (скрипт то для игры с платформами делал), сейчас думаю как это править (тут без костылей для игрока не обойтись .- и чЁ? Таки надо... в скрипте прописать, или как зависимость.
Незнаю зачем я ... k 1
*
не, а - пиво пью, а саунда нету - 223_platform_test.blend 

Да как бы - платформа как в Портал, и звук к ней - это больное место в BGE. Если справишся, будешь опять великим решателем проблем. Я в свою очередь, с Божьей помощью, сделаю комнату с платформами, кубом, дверьми... - в стиле Portal 1. Пример будет доступен во ВСЕМ МИРЕ
! Даже поставим тебе памятник
. John Hamilton нашел самый костыльный способ - как гворят - "на от**бись".
Про пиво, энто я так - потроллил (без особого зла
), хотел посмотреть на твою реакцию


Про пиво, энто я так - потроллил (без особого зла


Владас:
хотел посмотреть на твою реакциюА я уж подумал, саунда нету - напился с горя John Hamilton нашел самый костыльный способЭто чисто логикой? Я так когда то пробовал делать, не удобно, по тому и решил скрипт сделать и выложить - а вось пригодится кому
k 1
*
Там кароче актуатор наверное как в скрипте надо было обозвать... я таки понял, к счастью.
А ты не мог бы еще прописать включения и выключения через свойство "Active"?
223_platform_test.blend - таки саунд ОN, если и мозги On...
А может привязку Игрока через родителя - Parent? Как бы двигаешься - нет родительства, остановился - включилось. Как с саундом...

А ты не мог бы еще прописать включения и выключения через свойство "Active"?
223_platform_test.blend - таки саунд ОN, если и мозги On...

А может привязку Игрока через родителя - Parent? Как бы двигаешься - нет родительства, остановился - включилось. Как с саундом...

Владас:
Звук еще не работает? В твоем примере неправильно выставлены режимы воспроизведения, актуатор Move должен иметь режим "Loop Stop", а актуатор Stop - "Play End". Это потому, что сигнал на активацию Move, пока платформа движется, поступает каждый логический тик, а на Stop только один раз - когда она ... k 1
*

БлендерУкраина © 2016 Дмитрий Корбут