• Windows Store App JavaScript 开发:小球运动示例


    通过前面内容的学习,相信读者已经对开发基于JavaScriptWindows应用商店应用有了一定的了解,本小节通过一个小球运动的示例来介绍如何新建一个JavaScriptWindows应用商店项目,以及怎样向项目中添加功能实现代码。

    首先启动Visual Studio 2012集成开发工具,打开文件菜单,选择其中的新建项目菜单项后会弹出新建项目窗口。在新建项目窗口左侧的JavaScript模板分类中选择Windows应用商店,并在窗口中间的项目模板列表中选择空白应用程序项目模板,然后在窗口下方的名称文本框中输入项目命名AMovingBall,点击新建项目窗口右下角的确定按钮完成项目创建。

    完成项目的创建之后打开“解决方案资源管理器”窗口,可以发现项目中已经默认包含了一些文件夹和文件,本示例将会用到项目根目录下的default.html文件和js文件夹中的default.js文件。

    首先在default.html文件中设计应用程序的前台界面,打开default.js文件可以发现,文件中已经默认包含了对WinJS库文件以及default.jsdefault.css文件的引用。在body元素内添加一个画布元素,并将id属性值设置为AnimationCanvas。相应的HTML代码片段如下所示:

    <body>

        <canvas id="AnimationCanvas"></canvas>

    </body>

    下面在default.js文件中实现小球运动的逻辑功能。打开default.js文件会看到,文件中已经默认包含了一个匿名函数,并在匿名函数内定义了处理应用程序生命周期事件的函数。在“var activation = Windows.ApplicationModel.Activation;”语句后面定义三个变量,以便在后面的程序中使用,代码片段如下所示:

    var animationContext = null;

    var ballPosition = { x: 100, y: 100 };

    var ballSpeed = { x: 5, y: 4 };

    其中animationContext变量用来保存与画布相关的对象,另外两个变量ballPositionballSpeed中分别保存了小球的初始位置和初始运动速度。

    接下来在应用程序激活事件的处理函数中“args.setPromise(WinJS.UI.processAll());”语句的后面添加代码,初始化画布画布相关对象并在画布上绘制小球,代码片段如下所示:

    var animationCanvas = document.getElementById("AnimationCanvas");

    //设置画布大小

    animationCanvas.width = window.innerWidth;

    animationCanvas.height = window.innerHeight;

    //获取用于绘制2d图形的画布相关的对象

    animationContext = animationCanvas.getContext("2d");

    drawABall();

    在上面的代码中,首先调用document对象的getElementById函数获得id属性值为AnimationCanvas的元素对象,并赋值给animationCanvas变量。接着通过animationCanvas变量为元素对象的widthheight属性赋值分别设置画布的宽度和高度。宽度设置为应用程序窗口中内容部分的宽度,不包含窗口边框和滚动条等的宽度;高度设置为应用程序窗口中内容部分的高度,不包含边框和工具条等的高度。然后通过animationCanvas变量调用元素对象的getContext函数得到用于2D绘图的对象,并保存在前面定义的animationContext变量中,最后调用drawABall函数在画布上绘制运动的小球。

    下面给出代码中使用的drawABall函数,这个函数的位置在“app.start();”语句之前,实现每隔一段时间在画布上绘制一个小球,函数的代码如下所示:

    function drawABall() {

        var animationCanvas = document.getElementById("AnimationCanvas");

        //清除画布内容

        animationContext.clearRect(0, 0, animationCanvas.width, animationCanvas.height);

        animationContext.beginPath();

        animationContext.fillStyle = "#FFFFFF";

        //表述形状

        animationContext.arc(ballPosition.x, ballPosition.y, 50, 0, Math.PI * 2, true);

        //开始绘制小球

        animationContext.fill();

        //当小球碰到画布的边缘时,改变运动方向

        if (ballPosition.x < 50 || ballPosition.x > animationCanvas.width - 50) {

            ballSpeed.x = -ballSpeed.x;

        }

        if (ballPosition.y < 50 || ballPosition.y > animationCanvas.height - 50) {

            ballSpeed.y = -ballSpeed.y;

        }

        //改变小球的圆心位置

        ballPosition.x += ballSpeed.x;

        ballPosition.y += ballSpeed.y;

        //每隔10毫秒递归调用draw()函数,实现运动效果

        setTimeout(function () { drawABall() }, 10);

    }

    在上面的代码中,首先调用document对象的getElementById函数获得id属性值为AnimationCanvas的元素对象,并赋值给animationCanvas变量。通过animationContext调用元素对象的clearRect函数清除画布上的内容,由于在内存中图形是以一组子路径的形式存储的,因此在清除了画布内容之后还需要通过animationContext变量调用元素对象的beginPath函数重置子路径。接着通过animationContext变量使用元素对象的fillStyle函数设置填充颜色,调用arc函数指定所绘制图形的位置和形状,其中位置由ballPosition变量指定,形状则是一个半径为50像素的小球,并使用fill函数开始绘制小球。接下来根据position对象判断小球在应用程序界面中的位置,当小球圆心的位置与左边缘或右边缘的距离小于小球的半径时,将小球在水平方向的速度设置为当前水平方向速度的相反数,当小球圆心的位置与上边缘或下边缘的距离小于小球的半径时,将小球在竖直方向的速度设置为当前竖直方向速度的相反数,这样可以使小球在碰到画布边缘时返回画布内。最后更改ballPosition变量的值重新设置小球的位置,并调用setTimeout函数在10毫秒后调用drawABall函数,擦除画布上原有的小球并在新的位置重新绘制小球。

    启动调试,将出现小球在屏幕上运动的画面,这里只捕捉了小球运动的三个时刻,如图19-6所示。在最左边的图中,小球开始向右下方运动;经过一段时间之后,小球碰到了画布的下边缘,如中间的图所示;然后小球弹回屏幕内并向右上方运动,如最右边的图所示。

    19-6 小球运动效果图

  • 相关阅读:
    (转)Android 升级 ADT 之后报错之一 case语句 .
    myeclipse CTRL+1功能
    (转)项目延期原因及应对之道
    shiro的使用2 灵活使用shiro的密码服务模块
    shiro的使用1 简单的认证
    最全的 eclipse web 项目目录结构以及Tomcat的各个目录的作用
    Eclipse导入git上的maven web项目 以及部署成功运行
    eclipse中怎么导入git库下载下来的web项目
    git和github的关系以及简单易懂的理解
    LINUX 怎么实现root和普通用户的切换及怎么更改root密码
  • 原文地址:https://www.cnblogs.com/finehappy/p/4234896.html
Copyright © 2020-2023  润新知