gpt4 book ai didi

带有CSS位置的Javascript游戏

转载 作者:行者123 更新时间:2023-11-30 13:36:32 25 4
gpt4 key购买 nike

我正在尝试用 javascript 制作一个非常简单的直升机游戏,我目前正在使用 css 位置来移动对象。但我想知道当用户按下按钮时是否有更好/其他的方法来移动对象 (div)

这是我目前得到的代码..

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Game 2 helicopter</title>
<script type="text/javascript">
function num(x){
return parseInt(x.replace(/([^0-9]+)/g,''));
}

function getPos(x, y){
var inum=Math.floor(Math.random()*(y+1-x)) + x;
inum=inum;
return inum;
}

function setTop(x,y){ x.style.top = y+'px'; }
function setBot(x,y){ x.style.bottom = y+'px'; }
function setLeft(x,y){ x.style.left = y+'px'; }
function setRight(x,y){ x.style.right = y+'px'; }

function getTop(x){ return num(x.style.top); }
function getBot(x){ return num(x.style.bottom); }
function getLeft(x){ return num(x.style.left); }
function getRight(x){ return num(x.style.right); }

function moveLeft(x,y){
var heli = document.getElementById('heli');
var obj = document.getElementById('obj');
var poss = [20,120,350,400];
var r_pos = getPos(1,4);
var rand_pos = poss[r_pos];
xleft = getLeft(x)-y;
if(xleft>0){
xleft=xleft;
}
else{
xleft=800;
setTop(x,rand_pos);
}
setLeft(x,xleft);
setTimeout(function(){moveLeft(x,y)},10);
checkGame(heli,obj);
}
var heli;
var obj;

function checkGame(x,y){
var obj_right = getLeft(x) + 100;
var yt = getTop(y);
var yb = (getTop(y)+100);
if(getTop(x) >= yt && getTop(x) <= yb && obj_right==getLeft(y)){
endGame();
}
}

function func(){
var x = document.getElementById('heli');
var y = document.getElementById('obj');
alert(getTop(x)+' '+getTop(y)+' '+(getTop(y)+200));
}

function startGame(e){
document.getElementById('park').style.display='block';
document.getElementById('newgame').style.display='none';
heli = document.getElementById('heli');
obj = document.getElementById('obj');
hp = heli.style.top;
op = obj.style.top;
setTop(heli,20);
setLeft(heli,20);

setLeft(obj,800);
setTop(obj,20);
moveLeft(obj,5);
}

function newGameLoad(){
document.getElementById('park').style.display='none';
document.getElementById('newgame').style.display='block';
}

function gamePos(e){
heli = document.getElementById('heli');
obj = document.getElementById('obj');
var keynum;
var keychar;
var numcheck;

if(window.event){ // IE
keynum = e.keyCode;
}
else if(e.which){ // Netscape/Firefox/Opera
keynum = e.which;
}

keychar = String.fromCharCode(keynum); // up=38 down=40 left=37 right=39
/*if(keynum==37){ //left
tl=tl-20;
db.style.left = tl + 'px';
}

if(keynum==39){ //right
//stopPos();
tl=tl+20;
db.style.left = tl + 'px';
}*/

curb = getTop(heli);

if(keynum==38){ //top
setTop(heli,curb-10);
//alert(curb+10);
}

if(keynum==40){ //bottom
setTop(heli,curb+10);
//alert(curb-10);
}
}

function endGame(){
clearTimeout();
newGameLoad();
}

</script>
<style type="text/css">
.play{position:absolute;color:#fff;} #heli{background:url(http://classroomclipart.com/images/gallery/Clipart/Transportation/Helicopter/TN_00-helicopter2.jpg);width:150px;height:59px;}
#obj{background:red;width:20px;height:200px;}
.park{height:550px;border:5px solid brown;border-left:none;border-right:none;}
#newgame{display:none;}
</style>
</head>
<body onload="startGame();" onkeydown="gamePos(event);">
<div class="park" id="park">
<div id="heli" class="play"></div>
<div id="obj" class="play"></div>
</div>
<input type="button" id="newgame" style="position:absolute;top:25%;left:25%;" onclick="startGame();" value="New Game" />
</body>
</html>

最佳答案

一些一般性评论:

  1. parseInt()已经忽略尾随的非数字,所以不需要你的 num()功能。如果有,您可以将该正则表达式更简单地写为 /\D+/g .

  2. 如果速度很重要,一个稍微快一点的方法是 x<<0 .

  3. 全部getPos应该只是:return Math.floor(...)+x; .我不明白为什么要声明并设置一个变量,将其设置为自身,然后返回它。

  4. 而不是重新获取 heliobj每次调用 moveLeft() 的元素,你应该设置一次(在文档加载后)并让 moveLeft()是一个引用它们的闭包。与 poss 相同.

  5. 你忘了 var你的xleft变量,使其成为全局变量。

  6. 你有if (xleft>0){ xleft=xleft; } .这没有做任何事情。

  7. 您可以在同一行声明多个变量,例如var heli, obj;

  8. 而不是使用 alert用于调试,使用 console.log (或者更好的是,实际断点和单步执行您的代码)。你会发现你的生活轻松多了。查找适用于 Safari/Chrome 的开发人员工具或适用于 Firefox 的 Firebug。

  9. 还有更多的全局变量比如hpop .

  10. 你应该看看像jQuery这样的图书馆这将使您的代码更易于开发。例如,您不必对事件进行特定于浏览器的测试,因为它会将事件规范化。

  11. 使用 switch()语句来处理您的键码而不是多个 if声明。

  12. 删除 onloadonkeydown处理程序,而是从您的脚本中以编程方式注册它们。

  13. 删除 style从您的 HTML 中获取属性,并将其放入您的样式表中。

关于带有CSS位置的Javascript游戏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4612085/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com