如何使用JavaScript更改和移动图像

时间:2014-09-30 00:47:02

标签: javascript

这是我在这里发表的第一篇文章......好吧,我需要的是使用键盘上的4个键在屏幕上移动图像并更改每个键的图像,例如:
--W--
A-S-d
当我按“D”键时,我的物体应该向右移动,我的图像应该是“朝向”的 当我按下“A”键时,我的物体应该向左移动,我的图像应该是“facingleft”,所以它会......

****编辑:这是我的项目在您的帮助后的方式!谢谢!!!:http://xonny.esy.es/Xonnygame/index.html

我在这里有这个代码,但似乎不可能做我想要的事情,所以我需要修改它!

<html>
<head>

<title>Moving an Image</title>

<script language="JavaScript">

function moveObj(name, Xpix, Ypix) 
{
    obj = document.getElementById(name);

    px = parseInt(obj.style.left) + Xpix;
    py = parseInt(obj.style.top) + Ypix;
    obj.style.left = px;
    obj.style.top = py;
}

function ProcessKeypress(e)
{
    var myObj = "mario";
    var moveBy = 10;

    if (e.keyCode) keycode=e.keyCode;
    else keycode=e.which;
    ch=String.fromCharCode(keycode);

    if(ch=='a' || ch=='A')      moveObj(myObj, -moveBy, 0);
    else if(ch=='d' || ch=='D')     moveObj(myObj, moveBy, 0);
    else if(ch=='w' || ch=='W')     moveObj(myObj, 0, -moveBy);
    else if(ch=='s' || ch=='S')     moveObj(myObj, 0, moveBy);
}

</script>

<body onKeyPress="ProcessKeypress(event);">

<p><img id="mario" style="z-index: 0; left: 300px; position: absolute; top: 250px" 
    height=72 width=100 align=baseline border=0 hspace=0 src="mario right.jpg"></p>

</body>
</html>

3 个答案:

答案 0 :(得分:1)

示例(首先点击图片,确保在按任意键之前你在正确的画布上): http://jsfiddle.net/leojavier/f8kp6auc/

<img id="item" style="width:100px; height:100px; cursor:pointer; position:relative; left:10px; top:20px;" src="http://www.adobe.com/business/calculator/VIP/image/loader.gif" alt="">
<script>
(function(){

        item = document.getElementById("item");

        function move(x){
            var currentPositionX = parseInt(item.style.left);
            var currentPositionY = parseInt(item.style.top);
            console.log(currentPositionY);
            switch(x){
                    case "left":
                    item.style.left = currentPositionX - 15 + "px";
                    break;
                    case "right":
                    item.style.left = currentPositionX + 15 + "px";
                    break;
                    case "up":
                    item.style.top = currentPositionY - 15 + "px";
                    break;
                    case "down":
                    item.style.top = currentPositionY + 15 + "px";
                    break;
            }

        }


        window.addEventListener("keydown", key, false);
        function key(e){
            switch(e.keyCode){
                case 65:
                //LEFT
                move('left');
                break;
                case 68:
                //RIGHT
                move('right');
                break;
                case 87:
                //UP
                move('up');
                break;
                case 83:
                //DOWN
                move('down');
                break;
            }
        }
    })();
</script>

答案 1 :(得分:0)

你应该创建两个马里奥图像,一个面向右,另一个面向左,并在它们之间切换;

if(ch=='d' || ch=='D'){
    moveObj(myObj, moveBy, 0);
    document.getElementById(myObj).src="mariofacingright.png";
}

左边是这样的。此外,如果您希望动画顺利进行,则应使用keydown和keyup。 Keydown应该创建一个间隔,每个X移动图像,keyup删除间隔。这样你的动画就会很流畅,你可以同时向上移动它。

答案 2 :(得分:0)

这将是您的最终代码。在正文中你添加:

<body onkeydown="keydown(event)" onkeyup="keyup(event)">

js就是这样的

var movUp=false, movDown=false, movLeft=false, movRight=false;

function moveMario() 
{
    obj = document.getElementById("mario");
    px = parseInt(obj.style.left);
    py = parseInt(obj.style.top);
    var moveby=5;

    if(movUp) py=py-moveby;
    if(movDown) py=py+moveby;
    if(movLeft) px=px-moveby;
    if(movRight) px=px+moveby;

    if(movUp&&!movLeft&&!movRight&&!movDown) obj.src='mario_up.png';
    if(!movUp&&movLeft&&!movRight&&!movDown) obj.src='mario_left.png';
    if(!movUp&&!movLeft&&movRight&&!movDown) obj.src='mario_right.png';
    if(!movUp&&!movLeft&&!movRight&&movDown) obj.src='mario_down.png';

    if(movUp&&movLeft) obj.src='mario_up_left.png';
    if(movDown&&movLeft) obj.src='mario_down_left.png';
    if(movUp&&movRight) obj.src='mario_up_right.png';
    if(movDown&&movRight) obj.src='mario_down_right.png';

    if(!movUp&&!movLeft&&!movRight&&!movDown) obj.src='mario.png';


    obj.style.left = px;
    obj.style.top = py;
}

function keydown(e){
    ch=String.fromCharCode(e.keyCode).toLowerCase(); // toLowerCase() so we don't have to check for 'a' and 'A';
    moveby=5;
    if(ch=="a") movLeft=true;
    if(ch=="s") movDown=true;
    if(ch=="d") movRight=true;
    if(ch=="w") movUp=true;
}

function keyup(e){
    ch=String.fromCharCode(e.keyCode).toLowerCase();
    moveby=5;
    if(ch=="a") movLeft=false;
    if(ch=="s") movDown=false;
    if(ch=="d") movRight=false;
    if(ch=="w") movUp=false;
}

setInterval("moveMario()",30);

每次按下方向键,我们将该方向设置为true。每30毫秒,调用函数moveMario(),它将图像移动到设置为true的方向,并将图像更改为这些方向。

顺便说一下,在你的html代码中,你永远不会关闭head标签。小心。