

Список разделов › Геймдев в Blender › Игровой движок Blender
Я, если честно, не очень понял, как одно следует из другого?Mihanik писал(а):Если шарик находится на краю доски, то он даже подпрыгивает при резких движениях. От сюда следует, что доску лучше вращать вокруг центра шарика.
Если шарик находится на краю доски, то он даже подпрыгивает при резких движениях.
Ну тут надо поюзат. Вот бленд https://yadi.sk/d/irGQWc-1eq9CPBibo писал(а):Я, если честно, не очень понял, как одно следует из другого?
И это тоже, но если вращать вокруг шарика, то размер игрового поля можно сильно увеличить, наделать новых препятствий, возможно динамических, камеру привязать к шарику, предусмотрев изменение расстояния до него... И собственно это и есть борьба с непосредственным источником проблемы, она в том. что края доски летают вверх, вниз во время поворота.exooman писал(а):а не лучше попробовать побороться непосредственно с источником проблемы? То есть исключить это резкое движение , создав некий буфер для плавности начала движения?
Да это ж Neverball!)Mihanik писал(а):Вот бленд
А вот это, что за зверь, не соображу как работает, не оно?andreymal писал(а):Но по-моему надо-таки тригонометрический огород нагородить
А подробней, не понял, я ж нубdenis8424 писал(а):модуль mathutils поможет отцу русской демократии обоитись без зубодробительного матана
Или же доску сделать вовсе неподвижной, а силу рассчитывать и придавать шарику вручную, исходя из матрицы ориентации некой пустышки, чье вращение осуществляется мышкой.
А потом вылезет стопицот проблем, если игру приспичит сделать чутка навороченнее, аккуратнее с этим
import bge
from bge import render
from bge import logic
import math
cont = bge.logic.getCurrentController()# получаем контроллер
obj = cont.owner # получаем объект контроллера
scene = logic.getCurrentScene() # получаем счену
shar = scene.objects["sharik"] # получаем объект сцены sharik
render.setMousePosition(int(render.getWindowWidth()/2),int(render.getWindowHeight()/2))
#(render.getWindowWidth(),render.getWindowHeight()) ширина, высота окна
euler = obj.worldOrientation.to_euler() # получаем перепенную ориентации объекта преобразованную из матрицы в элер в радианах
#(logic.mouse.position) позиция курсора, верхний левый угол 0 0, нижний правый 1 1
# create a rotation matrix
def naklon(cont):
ugol_x = euler.x - ((logic.mouse.position[0]-0.5)*0.5) # угол поворота за кадр по x
ugol_y = euler.y - ((logic.mouse.position[1]-0.5)*-0.5) # угол поворота за кадр по y
rasst_x = shar.worldPosition.x-obj.worldPosition.x # расстояние между шариком и доской по x
rasst_y = shar.worldPosition.y-obj.worldPosition.y # расстояние между шариком и доской по y
comp = ((math.tan(ugol_y)*rasst_x)+(math.tan(ugol_x)*rasst_y*-1))
obj.worldPosition.z = (obj.worldPosition.z - comp)
euler.x = ((logic.mouse.position[0]-0.5)*0.5)
euler.y = ((logic.mouse.position[1]-0.5)*-0.5)
#(logic.mouse.position) позиция курсора, верхний левый угол 0 0, нижний правый 1 1
obj.worldOrientation = euler.to_matrix()
Сейчас мне это уже кажется проще, но потом по порядку.Или же доску сделать вовсе неподвижной, а силу рассчитывать и придавать шарику вручную, исходя из матрицы ориентации некой пустышки, чье вращение осуществляется мышкой.
Не, ура, всё понял, нужна была задержка на один кадр. Само поле сейчас чилдрен, а управляю родителем (без геометрии объект, пустышку наверное надо использовать). А если использовать медленного родителя, то вообще любая плавность.exooman писал(а):Имхо, то что доска по своему центру вращается - куда лучше выглядит, чем если будет центр брать из месторасположения шарика.
Не, в Neverball поиграй)exooman писал(а):Имхо, то что доска по своему центру вращается - куда лучше выглядит, чем если будет центр брать из месторасположения шарика.
Если попроще:Mihanik писал(а):Для начала, что это вообще такое, что означают эти переменные, 3 строки по 3 переменные?
Вернуться в Игровой движок Blender
Сейчас этот раздел просматривают: 1 гость