首页 > 移动平台 > 详细

js学习之tank的移动

时间:2015-12-07 13:58:07      阅读:213      评论:0      收藏:0      [点我收藏+]
<!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>
    <title>非自走型tank!!!!</title>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
    <style type="text/css">
        .map {
            background: gray;
            border: 1px solid black;
            position: relative;
            margin: 50px auto;
            width: 416px;
            height: 416px;
        }

        .tank {
            background-image: url("http://images.cnitblog.com/blog/294743/201306/12123133-eaa9ada8690e4216a2bee3e56442e032.gif");
            background-repeat: no-repeat;
            overflow: hidden;
            position: absolute;
            width: 32px;
            height: 32px;
            z-index: 3;
        }
    </style>
</head>
<body>
    <div class="map" id="map">
        <div id="me" class="tank">
        </div>
    </div>
    <script type="text/javascript">

        //js取不到样式表的值,暂时先这样
        var MyGlobal = {
            mapWidth: 416,
            mapHeight: 416
        };

        var Tank = function (id, dir, x, y) {//div的id,方向,起始坐标
            this.el = document.getElementById(id);
            this.direction = dir ? dir : up;
            this.speed = 10;//越大越慢
            //坦克活动状态 0 未活动 1 正在活动
            this.activeState = 0;
            this.tid = null;
            this.x = x ? x : 100;
            this.y = y ? y : 200;
        };
        Tank.prototype.init = function () {//tank生成位置
            var dir = this.direction;
            var tank = this.el;
            tank.style[left] = this.x + px;
            tank.style[top] = this.y + px;
            this.setDirection(dir);
        };
        Tank.prototype.setDirection = function (dir) {//tank方向图片
            var tank = this.el;
            if (dir == up) {
                tank.style[backgroundPosition] = 0 0;
            }
            if (dir == right) {
                tank.style[backgroundPosition] = -5px -36px;
            }
            if (dir == down) {
                tank.style[backgroundPosition] = 0 -73px;
            }
            if (dir == left) {
                tank.style[backgroundPosition] = 0 -105px;
            }
        };

        Tank.prototype.move = function (dir) {//tank移动
            if (this.activeState != 0) return false; //正在运动不管他
            this.activeState = 1; //将当前状态设置为正在运动
            if (this.direction != dir) {//转向
                this.direction = dir;
                this.setDirection(dir);
            }

            var tank = this.el;

            //获得当前位置
            var xpos = tank.style[left] ? tank.style[left] : 0;
            var ypos = tank.style[top] ? tank.style[top] : 0;
            xpos = parseInt(xpos);
            ypos = parseInt(ypos);

            //最大范围
            var mx = MyGlobal.mapWidth - 32;
            var my = MyGlobal.mapHeight - 32;

            switch (dir) {
                case up: ypos <= 0 ? 0 : ypos--; break;
                case right: xpos >= mx ? mx : xpos++; break;
                case down: ypos >= my ? my : ypos++; break;
                case left: xpos <= 0 ? 0 : xpos--; break;
            }

            //重新设置坦克位置
            tank.style[left] = xpos + px;
            tank.style[top] = ypos + px;

            //处理运动中的定时器
            if (this.tid) {
                clearTimeout(this.tid);
                this.tid = null;
            }

            //为了移动得更平滑
            this.x = xpos;
            this.y = ypos;
            var scope = this;
            var speed = this.speed;
            var repeat = function () {
                scope.move(dir);
            };
            if (!this.tid) {
                this.tid = setTimeout(repeat, speed);//10毫秒移动一次
            }

            //移动结束
            this.activeState = 0;
        }

        Tank.prototype.stop = function () {
            clearTimeout(this.tid);
            this.tid = null;
        };

        var tank = new Tank(me, right, 100, 100);
        tank.init();

        function getDir(code) {
            if (code == 87 || code == 119) {
                return up;
            }
            if (code == 100 || code == 68) {
                return right;
            }
            if (code == 115 || code == 83) {
                return down;
            }
            if (code == 97 || code == 65) {
                return left;
            }
            return null;
        }

        document.onkeydown = function (evt) {//按下键盘
            evt = (evt) ? evt : window.event;
            var keyCode = evt.keyCode;
            if (keyCode) {
                dir = getDir(keyCode.toString());//获得方向
            }
            tank.setDirection(dir);
            if (dir)
                tank.move(dir);//移动
            evt.preventDefault();
            return false;
        };
        document.onkeyup = function (evt) {//松开键盘
            tank.stop();
        };
        document.onkeypress = function (evt) {//从按下到松开键盘
            evt = (evt) ? evt : window.event;
            var keyCode = evt.keyCode;
            if (keyCode) {
                dir = getDir(keyCode.toString());//获得方向
            }
            if (dir)
                tank.move(dir);
            evt.preventDefault();
            return false;
        };
    </script>
</body>
</html>

 

js学习之tank的移动

原文:http://www.cnblogs.com/margin-gu/p/5025680.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!