Я создаю игру в пинбол для школьного проекта. Я использую p5.js для графики и Matter.js для физики. Все остальное в моем коде работает, за исключением ласт, которые продолжают стрелять непрерывно и усложняют игровой процесс.
Я попытался использовать аттракторы для решения проблемы, как это делает этот репозиторий [здесь](https://github.com/lonekorean/javascrip ... ball/my.js)
Однако мой код продолжает выдавать ошибки, говорящие, что привлечённое тело - это неопределенный. Я не знаю, в чем тут проблема.
Мой другой вариант — убрать скорость тела после выстрела. К сожалению, это не сработало, и я не знаю, почему Matter.js не распознает эту проблему.
Мой репозиторий на GitHub находится здесь
class Flipper {
constructor(x, y, w, h, isLeft) {
this.x = x;
this.y = y;
this.width = w;
this.height = h;
this.body = Bodies.rectangle(this.x, this.y, this.width, this.height);
this.velocity = 0.2;
this.hingeRadius = 5;
if (isLeft) {
this.hinge = Bodies.circle(this.x - this.width / 2, this.y, this.hingeRadius, { isStatic: true, label: "hinge" });
}
else {
this.hinge = Bodies.circle(this.x + this.width / 2, this.y, this.hingeRadius, { isStatic: true, label: "hinge" });
}
Composite.add(world, this.body);
let options = {
bodyA: this.body,
pointA: isLeft ? { x: - this.width / 2 + 10, y: 0} : { x: this.width / 2 - 10, y: 0 },
bodyB: this.hinge,
length: 0,
stiffness: 1,
};
this.constraint = Constraint.create(options);
Composite.add(world, this.constraint);
}
show() {
// display the flipper
let pos = this.body.position;
let angle = this.body.angle;
push();
translate(pos.x, pos.y);
rotate(angle);
rectMode(CENTER);
fill(100);
noStroke();
rect(0, 0, this.width, this.height);
pop();
let hingePos = this.hinge.position;
push();
translate(hingePos.x, hingePos.y);
fill(255);
noStroke();
circle(0, 0, this.hingeRadius);
pop();
}
hit(isLeft) {
if (isUp) {
if (isLeft) {
console.log(isUp);
Body.setAngularVelocity(this.body, -this.velocity);
// isUp = false;
}
else {
console.log(isUp);
Body.setAngularVelocity(this.body, this.velocity);
// isUp = false;
}
}
else {
Body.setAngularVelocity(this.body, 0);
}
}
}
// WASD to control flipper movement
function keyPressed() {
if (key === " ") {
if (gameState === "start") {
if (!bgMusic1.isPlaying()) {
bgMusic1.play();
}
gameState = "play";
}
}
if (key === "a") {
isUp = true;
lFlipper.hit(true);
}
if (key === "d") {
isUp = true;
rFlipper.hit(false);
}
}
// just to release flippers
function keyReleased() {
if (key === "a") {
isUp = false;
lFlipper.hit(true);
}
if (key === "d") {
isUp = false;
rFlipper.hit(false);
}
if (key === " ") {
if (gameState === "play") {
pinball.launch();
}
}
}
Подробнее здесь: https://stackoverflow.com/questions/793 ... -matter-js
Создание функциональных ласт для игры в пинбол с помощью p5.js и Matter.js ⇐ Javascript
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Согласованное преобразование значений гироскопа на Android и iOS с помощью Matter.js
Anonymous » » в форуме Android - 0 Ответы
- 19 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Согласованное преобразование значений гироскопа на Android и iOS с помощью Matter.js
Anonymous » » в форуме IOS - 0 Ответы
- 27 Просмотры
-
Последнее сообщение Anonymous
-