Хит-алгоритм обнаружения не работает, неуверенный, почему нет. (Javascript/Processing.js)

88
7

Я новичок в программировании игр (и вообще программировании). Я ранее делал клон Flappy Bird и несколько других, и я использовал алгоритм обнаружения попадания, предусмотренный Mozilla Developer Network здесь.


Теперь я пытаюсь воссоздать "Понг", но по какой-то причине он не работает в моем текущем коде, и я совершенно не знаю, почему нет. Я хочу, чтобы мяч попал в "весло", а затем вернулся, как он появился, но прямо сейчас он призраков через весло.


Я использую библиотеку Processing.js, но это должно быть очевидно для любого (знакомого с этим или нет), чего мой код пытается достичь. Функция draw() часто вызывается обработкой .js.


Код в действии (но не работает как ожидалось) можно найти здесь


var PADDLE_WIDTH = 10;
var PADDLE_HEIGHT = 75;
var PADDLE_X = 10;

var Player = function(y) {
this.x = PADDLE_X;
this.y = mouseY;
this.score = 0;
this.width = PADDLE_WIDTH;
this.height = PADDLE_HEIGHT;
};

Player.prototype.drawPlayer = function() {
rect(10,mouseY, this.width, this.height);

};

var Ball = function(x,y) {
this.x = x;
this.y = y;
this.speed = 4;
this.width = 10;
this.height = 10;
};

Ball.prototype.drawBall = function() {
rect(this.x, this.y, this.width, this.height);

};

Ball.prototype.onHit = function() {
if(this.y <= 0 || this.y >= height) {
this.speed *= -1;
} else if(this.x <= 0 || this.x >= width){
this.speed *= -1;
// HIT DETECTION UNDERNEATH
} else if (player.x < this.x + this.width &&
player.x + player.width > this.x &&
player.y < this.y + this.height &&
player.height + player.y > this.y){
this.speed *= -1;
}

};

var player = new Player();
var ball = new Ball(width/2, height/2);

draw = function() {

background(0);
fill(250, 250, 250);
ball.x -= ball.speed;

player.drawPlayer();
ball.drawBall();
ball.onHit();

};

спросил(а) 2021-01-25T20:34:32+03:00 4 месяца, 3 недели назад
1
Решение
77

В методе drawPlayer вы рисуете игрока в точке (10, mouseY), но никогда не обновляете свойство y игрока. Он всегда остается равным 0. Я бы порекомендовал вам добавить метод update, который изменит состояние игрока и изменит метод draw, чтобы отображать игрока исключительно в его состоянии. Что-то вроде

Player.prototype.updatePlayer = function() {
this.y = mouseY;
};

Player.prototype.drawPlayer = function() {
rect(this.x , this.y, this.width, this.height);
};

draw = function() {
// ...
player.updatePlayer();
player.drawPlayer();
ball.drawBall();
// ...
};

ответил(а) 2021-01-25T20:34:32+03:00 4 месяца, 3 недели назад
63

В drawPlayer вы можете добавить строку this.y = mouseY


Player.prototype.drawPlayer = function() {
rect(10,mouseY, this.width, this.height);
this.y = mouseY;
};

Fiddle: http://jsfiddle.net/z0acb8gy/

ответил(а) 2021-01-25T20:34:32+03:00 4 месяца, 3 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема