0
球似乎從槳的一側反彈,但當它從側面發出時,它會通過槳振動。我只是無法找到一個方法,它真的困擾我。我使用了一些邏輯門來定義其中需要進行invereted乒乓球比賽中球和槳之間的碰撞
function startGame() {
GameArea.start();
\t Ball1 = new CircleComp('white' , window.innerWidth - 200 , window.innerHeight - 20);
\t Ball1.ySpeed = 13.5;
\t Ball1.xSpeed = 6;
\t Paddle1 = new PaddleComp(87, 83, 0, window.innerHeight/2.5, 10, 70);
\t Paddle2 = new PaddleComp(38, 40, window.innerWidth - 10, window.innerHeight/2.5, 10 , 70);
}
var GameArea = {
\t canvas : canvas = document.querySelector("canvas"),
\t start : function(){
\t \t this.canvas.width = window.innerWidth;
\t \t this.canvas.height = window.innerHeight;
\t \t this.ctx = this.canvas.getContext('2d');
\t \t this.interval = setInterval(updateGameArea, 20);
window.addEventListener('keydown', function (e) {
GameArea.keys = (GameArea.keys || []);
GameArea.keys[e.keyCode] = true;
})
window.addEventListener('keyup', function (e) {
GameArea.keys[e.keyCode] = false;
})
},
\t clear : function() {
this.ctx.clearRect(0, 0, this.canvas.width, this.canvas.height);
}
}
function CircleComp(color, x , y){
\t this.x = x;
\t this.y = y;
\t this.width = 8;
this.height = 8;
\t var context1 = GameArea.ctx;
\t this.update = function(){
\t \t context1.beginPath();
\t \t context1.fillStyle = color;
\t \t context1.fillRect(this.x, this.y, this.width, this.height);
\t \t context1.fill();
\t \t context1.stroke();
\t \t this.updatePosition();
\t }
\t this.updatePosition = function(){
\t \t this.y += this.ySpeed; \t
\t \t this.x += this.xSpeed;
\t \t if(this.x + this.width > GameArea.canvas.width){
\t \t \t this.xSpeed = -this.xSpeed;
\t \t }
\t \t if(this.y + this.height > GameArea.canvas.height){
\t \t \t this.ySpeed = -this.ySpeed;; \t
\t \t }
\t \t if(this.x - this.width < 0){
\t \t \t this.xSpeed = -this.xSpeed;
\t \t } \t
\t \t if(this.y - this.height < 0){
\t \t \t this.ySpeed = -this.ySpeed;
\t \t }
\t \t if(this.y + this.height > Paddle2.y && this.y - this.width < (Paddle2.y + 130) && this.x + this.width > Paddle2.x){
\t \t \t this.xSpeed = -this.xSpeed;
\t \t } \t
\t \t if(this.y + this.height > Paddle1.y && this.y - this.width < (Paddle1.y + 70) && this.x - this.height < Paddle1.x + 10){
\t \t \t this.xSpeed = -this.xSpeed;
\t \t }
\t }
}
function PaddleComp(Upkey, Downkey, x, y, width, height){
\t this.x = x;
\t this.y = y;
\t this.width = width;
\t this.height = height;
\t this.ySpeed = 0;
\t var context2 = GameArea.ctx;
\t this.update = function(){
\t context2.fillStyle = 'white';
\t context2.fillRect(x,this.y,this.width,this.height); \t
\t this.updatePosition();
\t }
\t this.updatePosition = function() {
\t \t this.ySpeed = 0; \t
\t \t if (GameArea.keys && GameArea.keys[Upkey]) {
\t \t \t this.ySpeed = -15; //console.log('Up');
\t \t }
\t \t if (GameArea.keys && GameArea.keys[Downkey]) {
\t \t \t this.ySpeed = 15; //console.log('Down');
\t \t }
\t \t if ((GameArea.keys && GameArea.keys[Downkey]) && this.y + 130 > window.innerHeight){
\t \t \t this.ySpeed = this.ySpeed -15 ; \t
\t \t }
\t \t if ((GameArea.keys && GameArea.keys[Upkey]) && this.y < 0){
\t \t \t this.ySpeed = this.ySpeed +15 ; \t
\t \t }
\t \t this.y += this.ySpeed; \t \t \t
\t }
}
function updateGameArea(){
\t GameArea.clear();
\t Paddle1.update();
\t Paddle2.update();
\t Ball1.update();
}
<html>
\t <head>
\t \t <meta charset='urf-8'>
\t \t <style>
\t \t \t canvas{
\t \t \t \t border: 0px solid black;
\t \t \t \t background-color: black;
\t \t \t }
\t \t \t body{
\t \t \t \t margin: 0;
\t \t \t \t overflow: hidden;
\t \t \t }
\t \t </style>
\t </head>
\t <body onload='startGame()'>
\t \t <canvas></canvas>
\t \t <script src='Pong.js'></script>
\t </body>
</html>
謝謝!這真的幫助我理解碰撞機制。 –