Javascript冲突问题
我有一个球在屏幕上弹跳,我需要编写代码,当它与玩家发生碰撞时,基本上结束游戏。。。这是我当前的代码,但不起作用。如果你需要更多信息,请告诉我Javascript冲突问题,javascript,Javascript,我有一个球在屏幕上弹跳,我需要编写代码,当它与玩家发生碰撞时,基本上结束游戏。。。这是我当前的代码,但不起作用。如果你需要更多信息,请告诉我 if(playerLoc == ballLoc){ gameOver(); } 其中,playerLoc/ballLoc根据X轴和Y轴测量值进行测量 <script language="JavaScript"> //get info, process data, update screen objects
if(playerLoc == ballLoc){
gameOver();
}
其中,playerLoc/ballLoc根据X轴和Y轴测量值进行测量
<script language="JavaScript">
//get info, process data, update screen objects
//instance vars
var player;
var ball;
var score;
var axis;
var ballaxis;
//initial speeds
var dx = 6;
var dy = 6;
var currentScore = 0;
var timer;
//set initial conditions for ball and paddle
var playerTop = 400;
var playerLeft = 200;
var ballLeft = 228;
var ballTop = 4;
var playerLoc = playerLeft + playerTop;
var ballLoc = ballLeft + ballTop;
function init(){
//instantiate HTML object instance vars
player = document.getElementById('player');
ball = document.getElementById('ball');
score = document.getElementById('score');
axis = document.getElementById('axis');
ballaxis = document.getElementById('ballaxis');
//register key listener with document object
document.onkeydown = keyListener;
//start the game loop
start();
}
function keyListener(e){
if(!e){
//for IE
e = window.event;
}
if(e.keyCode==37 && playerLeft > 0){
//keyCode 37 is left arrow
playerLeft -= 10;
player.style.left = playerLeft + 'px';
}
if(e.keyCode==39 && playerLeft < 450){
//keyCode 39 is right arrow
playerLeft += 10;
player.style.left = playerLeft + 'px';
}
if(e.keyCode==38 && playerTop > 0){
//keyCode 38 is up arrow
playerTop -= 10;
player.style.top = playerTop + 'px';
}
if(e.keyCode==40 && playerTop < 450){
//keyCode 40 is down arrow
playerTop += 10;
player.style.top = playerTop + 'px';
}
}
function start(){
//game loop
render();
detectCollisions();
difficulty();
axisMeasure();
//end conditions
if(playerLoc == ballLoc){
gameOver();
}
else{
//still in play - keep the loop going
timer = setTimeout('start()',50);
}
}
function detectCollisions(){
//just reflect the ball on a collision
//a more robust engine could change trajectory of ball based
//on where the ball hits the paddle
if(collisionX())
dx = dx * -1;
if(collisionY())
dy = dy * -1;
}
function collisionX(){
//check left and right boundaries
if(ballLeft < 2 || ballLeft > 480)
return true;
else {
return false;
}
}
function collisionY(){
//check if at top of playing area
if(ballTop < 2 || ballTop > 480)
return true;
else {
return false;
}
}
function render(){
moveBall();
updateScore();
}
function moveBall(){
ballLeft += dx;
ballTop += dy;
ball.style.left = ballLeft;
ball.style.top = ballTop;
}
function axisMeasure(){
axis.innerHTML = 'P X-Axis: ' + playerLeft + ' P Y-Axis: ' + playerTop
ballaxis.innerHTML = 'B X-Axis: ' + ballLeft + ' B Y-Axis: ' + ballTop
}
function updateScore(){
currentScore += 5;
score.innerHTML = 'Score: ' + currentScore;
}
function difficulty(){
//as the game progresses, increase magnitude of the vertical speed
if(currentScore % 1000 == 0){
if(dy > 0)
dy += 1;
else
dy -= 1;
}
}
function gameOver(){
//end the game by clearing the timer, modifying the score label
clearTimeout(timer);
score.innerHTML += " Game Over";
score.style.backgroundColor = 'rgb(128,0,0)';
//获取信息、处理数据、更新屏幕对象
//实例变量
var播放器;
var球;
var评分;
var轴;
巴拉西斯变种;
//初始速度
var-dx=6;
var-dy=6;
var currentScore=0;
无功定时器;
//设置球和桨的初始条件
var playerTop=400;
var playerLeft=200;
var ballLeft=228;
var ballTop=4;
var playerLoc=playerLeft+playerTop;
var ballLoc=ballLeft+ballTop;
函数init(){
//实例化HTML对象实例变量
player=document.getElementById('player');
ball=document.getElementById('ball');
score=document.getElementById('score');
axis=document.getElementById('axis');
ballaxis=document.getElementById('ballaxis');
//向文档对象注册密钥侦听器
document.onkeydown=keyListener;
//开始游戏循环
start();
}
函数keyListener(e){
如果(!e){
//对于IE
e=窗口事件;
}
如果(e.keyCode==37&&playerLeft>0){
//键代码37为左箭头
playerLeft-=10;
player.style.left=playerLeft+'px';
}
如果(e.keyCode==39&&playerLeft<450){
//键代码39为右箭头
playerLeft+=10;
player.style.left=playerLeft+'px';
}
如果(e.keyCode==38&&playerTop>0){
//键代码38为向上箭头
playerTop-=10;
player.style.top=playerTop+'px';
}
如果(e.keyCode==40&&playerTop<450){
//按键代码40为向下箭头
playerTop+=10;
player.style.top=playerTop+'px';
}
}
函数start(){
//游戏循环
render();
检测碰撞();
难度();
axisMeasure();
//结束条件
如果(playerLoc==ballLoc){
gameOver();
}
否则{
//仍在进行中-继续循环
计时器=设置超时('start()',50);
}
}
函数detectCollisions(){
//只是在碰撞时反射球
//一个更坚固的引擎可以改变球的轨迹
//球打在桨上的位置
if(collisionX())
dx=dx*-1;
if(collisionY())
dy=dy*-1;
}
函数冲突x(){
//检查左右边界
如果(ballLeft<2 | | ballLeft>480)
返回true;
否则{
返回false;
}
}
函数冲突(){
//检查是否位于比赛区域的顶部
如果(球头<2 | |球头>480)
返回true;
否则{
返回false;
}
}
函数render(){
移动球();
updateScore();
}
函数moveBall(){
ballLeft+=dx;
球头+=dy;
ball.style.left=ballLeft;
ball.style.top=球头;
}
函数axisMeasure(){
axis.innerHTML='pX轴:'+playerLeft+'pY轴:'+playerTop
ballaxis.innerHTML='B X轴:'+ballLeft+'B Y轴:'+ballTop
}
函数updateScore(){
当前得分+=5分;
score.innerHTML='score:'+currentScore;
}
功能难度(){
//随着游戏的进行,增加垂直速度的幅度
如果(当前分数%1000==0){
如果(dy>0)
dy+=1;
其他的
dy-=1;
}
}
函数gameOver(){
//通过清除计时器、修改分数标签结束游戏
清除超时(计时器);
score.innerHTML+=“游戏结束”;
score.style.backgroundColor='rgb(128,0,0)';
Lol.。你好像没有显示任何代码。所以这是一个完整的黑暗拍摄
if(playerLoc.x == ballLoc.x && playerLoc.y == ballLoc.y){
gameOver();
}
或者,甚至可以尝试距离法
var distance = Math.sqrt((ballLoc.x- playerLoc.x) *(ballLoc.x-playerLoc.x) + (ballLoc.y - playerLoc.y) * (ballLoc.y-playerLoc.y));
if(distance < *some amount*)}
gameOver();
}
var distance=Math.sqrt((balloc.x-playerLoc.x)*(balloc.x-playerLoc.x)+(balloc.y-playerLoc.y)*(balloc.y-playerLoc.y));
如果(距离<*某个量*)}
gameOver();
}
编辑
好吧,既然代码已经发布了,我的答案有点不相关,但不管怎样,我都会把它保留在这里,因为距离检查是一种有效的方法,甚至在OP的情况下也会起作用
var ballX = ballLeft + (ballWidth/2),
ballY = ballTop + (ballHeight/2),
playerX = playerLeft + (playerWidth/2),
playerY = playerTop + (playerHeight/2);
var distance = Math.sqrt((ballX - playerX) *(ballX - playerX) + (ballY - playerTop) * (ballY - playerTop ));
if(distance < 25){ gameOver(); }
var ballX=ballLeft+(球宽/2),
球头=球头+(球高/2),
playerX=playerLeft+(playerWidth/2),
playerY=playerTop+(playerHeight/2);
变量距离=数学sqrt((ballX-playerX)*(ballX-playerX)+(ballY-playerTop)*(ballY-playerTop));
如果(距离<25){gameOver();}
“更多信息”?你什么都没告诉我们。。。哪些是playerLoc
,ballLoc
和gameOver
?此代码段何时执行?请共享您的所有代码。那么多的代码不足以回答这个问题。我们需要更多的信息。你的playerloc是一个对象还是一个变量?变量unpadated是实时的吗?从技术上讲,这段代码是有效的,您从未见过