Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Помогите с решением задачи джава скрипт

Артём Мещерин Ученик (117), на голосовании 1 год назад
Задача:После создания шарика ему устанавливается масса и задается первоначальный импульс движения. Измените код так, чтобы верхняя бочка в пирамиде упала на землю. Масса каждой бочки равна 105. Проверяйте новые решения, если бочка не падает. Как только бочка коснется земли – задача будет решена.
 inBall.physicsImpostor.setMass(1); 
inBall.physicsImpostor.forceUpdate();
inBall.physicsImpostor.applyImpulse(
new Vector3(0, 0, -50),
inBall.getAbsolutePosition()
);
Голосование за лучший ответ
Виктор Профи (896) 1 год назад
 // создание пирамиды из бочек 
var rows = 5;
for (var i = 0; i < rows; i++) {
var cols = rows - i;
for (var j = 0; j < cols; j++) {
var position = new BABYLON.Vector3(
(j - (cols - 1) * 0.5) * 2,
(i + 0.5) * 3,
0
);
var barrel = BABYLON.MeshBuilder.CreateCylinder(
"barrel",
{ height: 3, diameterTop: 1.5, diameterBottom: 1.5 },
scene
);
barrel.position.copyFrom(position);
// установка физических свойств бочки
barrel.physicsImpostor = new BABYLON.PhysicsImpostor(
barrel,
BABYLON.PhysicsImpostor.CylinderImpostor,
{ mass: 105, friction: 0.5, restitution: 0 },
scene
);
}
}

// создание шарика
var inBall = BABYLON.MeshBuilder.CreateSphere(
"inBall",
{ diameter: 1 },
scene
);
inBall.position.y = 20;

// установка физических свойств шарика
inBall.physicsImpostor = new BABYLON.PhysicsImpostor(
inBall,
BABYLON.PhysicsImpostor.SphereImpostor,
{ mass: 1, friction: 0.5, restitution: 0 },
scene
);

// установка первоначального импульса движения шарика
inBall.physicsImpostor.applyImpulse(
new BABYLON.Vector3(0, 0, -50),
inBall.getAbsolutePosition()
);

// создание плоскости земли
var ground = BABYLON.MeshBuilder.CreateGround(
"ground",
{ width: 20, height: 20 },
scene
);
ground.position.y = -1;

// установка физических свойств земли
ground.physicsImpostor = new BABYLON.PhysicsImpostor(
ground,
BABYLON.PhysicsImpostor.BoxImpostor,
{ mass: 0, friction: 0.5, restitution: 0.7 },
scene
);

// регистрация обработчика столкновений шарика с землей
inBall.physicsImpostor.registerOnPhysicsCollide(
ground.physicsImpostor,
function(main, collided) {
console.log("Ball touched the ground!");
// остановка движения шарика при столкновении с землей
inBall.physicsImpostor.setLinearVelocity(new BABYLON.Vector3(0, 0, 0));
}
);
Похожие вопросы