Я создаю игру в пинбол для школьного проекта. Я использую 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
Форум по Javascript
1737331204
Anonymous
Я создаю игру в пинбол для школьного проекта. Я использую p5.js для графики и Matter.js для физики. Все остальное в моем коде работает, за исключением ласт, которые продолжают стрелять непрерывно и усложняют игровой процесс.
Я попытался использовать аттракторы для решения проблемы, как это делает этот репозиторий [здесь](https://github.com/lonekorean/javascript-physicals/blob/master/demos/pinball/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();
}
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79369988/creating-functional-flippers-for-a-pinball-game-with-p5-js-and-matter-js[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия