热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

HTML5学习日记3------------js类的测试小程序

很久没懂的东西。平时想着打游戏~~现在来说说使用js类的好处~~~这是我写的一个人物移动的小demo~~~仿java类~首先第一个类GameFrame~1varGame

很久没懂的东西。平时想着打游戏~~

现在来说说使用js类的好处~~~

这是我写的一个人物移动的小demo~~~

仿java类~

首先第一个类GameFrame~

 1 var GameFrame = JSC.createClass({
 2     initialize:function(){
 3         this.myCanvas = document.createElement("canvas");
 4         this.myCanvas.setAttribute("id", "mainFrame");
 5         this.myCanvas.setAttribute("width", "800");
 6         this.myCanvas.setAttribute("height", "600");
 7         this.myCanvas.setAttribute("onClick", "gameFrame.frameClick(event)");
 8         var canvasNav = document.getElementById("mainFrameNav");
 9         canvasNav.appendChild(this.myCanvas);
10         this.cxt = this.myCanvas.getContext("2d");
11         this.player = new Role(this,"test",15,15);
12         this.cMap = new Map(this,0,0);
13     },
14     print:function(frame){
15         frame.clean(frame.cxt);
16         frame.cMap.draw(frame.cxt);
17         frame.player.draw(frame.cxt);
18         frame.draw(frame.cxt);
19     },
20     clean:function(cxt){
21         this.cxt.fill;
22         this.cxt.fillRect(0,0,this.myCanvas.getAttribute("width"),this.myCanvas.getAttribute("height"));
23     },
24     frameClick:function(e){
25         var t = e.target || e.srcElement;
26         var x = t.offsetLeft + t.clientLeft;
27         var y = t.offsetTop + t.clientTop;
28         this.player.moveTo(e.clientX-x,e.clientY-y);
29     },
30     draw:function(cxt){
31         cxt
32     }
33 });

这是游戏主窗口控制类~这里有一个我很郁闷的地方。就是print。js的定时器的使用问题。就不讨论了。

然后是地图类Map~

 1 var Map = JSC.createClass({
 2     initialize:function(frame,x,y){
 3         //外框架对象
 4         this.frame = frame;
 5         //开始截图的坐标
 6         this.x = x;
 7         this.y = y;
 8         //地图载入
 9         this.cImg = new Image();
10         this.cImg.src = "images/20.jpg";
11         this.switchArray = new Array();
12         this.switchArray[1] = new Switch(this,1500,1000);
13     },
14     draw:function(cxt){
15         cxt.drawImage(
16                 this.cImg,
17                 this.x,
18                 this.y,
19                 this.frame.myCanvas.getAttribute("width"),
20                 this.frame.myCanvas.getAttribute("height"),
21                 0,
22                 0,
23                 this.frame.myCanvas.getAttribute("width"),
24                 this.frame.myCanvas.getAttribute("height")
25                 );
26         for(var switchObj in this.switchArray){
27             this.switchArray[switchObj].draw(cxt);
28         }
29         
30     },
31     swicthMap:function(path){
32         this.cImg.src = path;
33     },
34     canMoveX:function(stepx){
35         if(stepx > 0 && (this.x+Number(this.frame.myCanvas.getAttribute("width"))+stepx) <= this.cImg.width){
36             this.x = this.x + stepx;
37             return true;
38         }else if(stepx <0 && (this.x + stepx) >= 0){
39             this.x = this.x + stepx;
40             return true;
41         }else if(stepx > 0) {
42             this.x = this.cImg.width - Number(this.frame.myCanvas.getAttribute("width"));
43             return false;
44         }else {
45             this.x = 0;
46             return false;
47         }
48     },
49     canMoveY:function(stepy){
50         if(stepy > 0 && (this.y+Number(this.frame.myCanvas.getAttribute("height"))+stepy) <= this.cImg.height){
51             this.y = this.y + stepy;
52             return true;
53         }else if(stepy <0 && (this.y + stepy) >= 0){
54             this.y = this.y + stepy;
55             return true;
56         }else if(stepy > 0) {
57             this.y = this.cImg.height - Number(this.frame.myCanvas.getAttribute("height"));
58             return false;
59         }else {
60             this.y = 0;
61             return false;
62         }
63     }
64 });

这是游戏地图类~

接下来是人物类Role~

var Role = new JSC.createClass({
    initialize:function(frame,name,x,y){
        this.frame = frame;
        //角色名
        this.name = name;
        //角色屏幕坐标
        this.x = x;
        this.y = y;
        //角色地图坐标
        this.wx = x;
        this.wy = y;
        //角色需要移动到的屏幕坐标
        this.px;
        this.py;
        //角色需要移动到的地图坐标
        this.pwx;
        this.pwy;
        //角色的移速
        this.speed = 5;
        //角色的步伐
        this.step = 0;
        //角色x坐标步伐
        this.stepx = 0;
        //角色Y坐标步伐
        this.stepy = 0;
    },
    draw: function(cxt) {
        this.move();
        cxt.fillStyle="#FF0000";
        cxt.beginPath();
        cxt.arc(this.x,this.y,15,0,Math.PI*2,true);
        cxt.closePath();
        cxt.fill();
    },
    move: function(){
        if(Math.abs(this.wx-this.pwx)>this.speed){
            var cx = this.x + this.stepx;
            if(this.stepx > 0){
                if(this.x >= (this.frame.myCanvas.getAttribute("width")/2)) {
                    if(this.frame.cMap.canMoveX(this.stepx)) this.x = this.x;
                    else this.x = cx;
                }else {
                    this.x = cx;
                }
            }else {
                if(this.x <= (this.frame.myCanvas.getAttribute("width")/2)) {
                    if(this.frame.cMap.canMoveX(this.stepx)) this.x = this.x;
                    else this.x = cx;
                }else {
                    this.x = cx;
                }
            }
            this.wx = this.wx + this.stepx;
        }
        
        if(Math.abs(this.wy-this.pwy)>this.speed){
            var cy = this.y + this.stepy;
            if(this.stepy > 0){
                if(cy >= (this.frame.myCanvas.getAttribute("height")/2)) {
                    if(this.frame.cMap.canMoveY(this.stepy)) this.y = this.y;
                    else this.y = cy;
                }else {
                    this.y = cy;
                }
            }else {
                if(cy <= (this.frame.myCanvas.getAttribute("height")/2)) {
                    if(this.frame.cMap.canMoveY(this.stepy)) this.y = this.y;
                    else this.y = cy;
                }else {
                    this.y = cy;
                }
            }
            this.wy = this.wy + this.stepy;
        }
    },
    moveTo: function(x,y){
        this.px = x;
        this.py = y;
        this.pwx = this.wx + (this.px - this.x);
        this.pwy = this.wy + (this.py - this.y);
        var dis = Math.sqrt(Math.pow((this.px-this.x), 2) + Math.pow((this.py-this.y), 2));
        this.step = dis/this.speed;
        this.stepx = (this.px-this.x)/this.step;
        this.stepy = (this.py-this.y)/this.step;
    }
});

这是人物类~

接下来是地图切换类~

 1 var Switch = JSC.createClass({
 2     initialize:function(map,x,y){
 3         this.x = x;
 4         this.y = y;
 5         this.r = 30;
 6         this.map = map;
 7     },
 8     draw:function(cxt){
 9         if(this.canSee()){
10             cxt.fill;
11             cxt.beginPath();
12             cxt.arc(this.x-this.map.x,this.y-this.map.y,this.r,0,Math.PI*2,true);
13             cxt.closePath();
14         }
15             
16     },
17     swicthMap:function(path){
18         this.cImg.src = path;
19     },
20     canSee:function(){
21         if(this.map.x <= (this.x+this.r) && 
22                 this.map.y <= (this.y+this.r) && 
23                 (this.map.frame.myCanvas.getAttribute("width")+this.map.x) >= (this.x-30) && 
24                 (this.map.frame.myCanvas.getAttribute("height")+this.map.y) >= (this.y-this.r)
25             )
26             return true;
27         return false;
28     }
29 });

切换地图没有实现~

大概就是这样子。使用了js类之后开发起来感觉就是在开发C或者java代码。不过很多事件触发还是没有。。。

当然这只是小例子~不代表这可以开发游戏。

附件:小demo


推荐阅读
  • 本文详细介绍了一种利用 ESP8266 01S 模块构建 Web 服务器的成功实践方案。通过具体的代码示例和详细的步骤说明,帮助读者快速掌握该模块的使用方法。在疫情期间,作者重新审视并研究了这一未被充分利用的模块,最终成功实现了 Web 服务器的功能。本文不仅提供了完整的代码实现,还涵盖了调试过程中遇到的常见问题及其解决方法,为初学者提供了宝贵的参考。 ... [详细]
  • 在使用 Qt 进行 YUV420 图像渲染时,由于 Qt 本身不支持直接绘制 YUV 数据,因此需要借助 QOpenGLWidget 和 OpenGL 技术来实现。通过继承 QOpenGLWidget 类并重写其绘图方法,可以利用 GPU 的高效渲染能力,实现高质量的 YUV420 图像显示。此外,这种方法还能显著提高图像处理的性能和流畅性。 ... [详细]
  • ### 优化后的摘要本文对 HDU ACM 1073 题目进行了详细解析,该题属于基础字符串处理范畴。通过分析题目要求,我们可以发现这是一道较为简单的题目。代码实现中使用了 C++ 语言,并定义了一个常量 `N` 用于字符串长度的限制。主要操作包括字符串的输入、处理和输出,具体步骤涉及字符数组的初始化和字符串的逆序操作。通过对该题目的深入探讨,读者可以更好地理解字符串处理的基本方法和技巧。 ... [详细]
  • 如何使用 `org.eclipse.rdf4j.query.impl.MapBindingSet.getValue()` 方法及其代码示例详解 ... [详细]
  • 本文详细解析了使用C++实现的键盘输入记录程序的源代码,该程序在Windows应用程序开发中具有很高的实用价值。键盘记录功能不仅在远程控制软件中广泛应用,还为开发者提供了强大的调试和监控工具。通过具体实例,本文深入探讨了C++键盘记录程序的设计与实现,适合需要相关技术的开发者参考。 ... [详细]
  • 如何在PHP中准确获取服务器IP地址?
    如何在PHP中准确获取服务器IP地址? ... [详细]
  • 在对WordPress Duplicator插件0.4.4版本的安全评估中,发现其存在跨站脚本(XSS)攻击漏洞。此漏洞可能被利用进行恶意操作,建议用户及时更新至最新版本以确保系统安全。测试方法仅限于安全研究和教学目的,使用时需自行承担风险。漏洞编号:HTB23162。 ... [详细]
  • 本文介绍了如何利用Shell脚本高效地部署MHA(MySQL High Availability)高可用集群。通过详细的脚本编写和配置示例,展示了自动化部署过程中的关键步骤和注意事项。该方法不仅简化了集群的部署流程,还提高了系统的稳定性和可用性。 ... [详细]
  • Java Socket 关键参数详解与优化建议
    Java Socket 的 API 虽然被广泛使用,但其关键参数的用途却鲜为人知。本文详细解析了 Java Socket 中的重要参数,如 backlog 参数,它用于控制服务器等待连接请求的队列长度。此外,还探讨了其他参数如 SO_TIMEOUT、SO_REUSEADDR 等的配置方法及其对性能的影响,并提供了优化建议,帮助开发者提升网络通信的稳定性和效率。 ... [详细]
  • 在《ChartData类详解》一文中,我们将深入探讨 MPAndroidChart 中的 ChartData 类。本文将详细介绍如何设置图表颜色(Setting Colors)以及如何格式化数据值(Formatting Data Values),通过 ValueFormatter 的使用来提升图表的可读性和美观度。此外,我们还将介绍一些高级配置选项,帮助开发者更好地定制和优化图表展示效果。 ... [详细]
  • 优化后的标题:深入探讨网关安全:将微服务升级为OAuth2资源服务器的最佳实践
    本文深入探讨了如何将微服务升级为OAuth2资源服务器,以订单服务为例,详细介绍了在POM文件中添加 `spring-cloud-starter-oauth2` 依赖,并配置Spring Security以实现对微服务的保护。通过这一过程,不仅增强了系统的安全性,还提高了资源访问的可控性和灵活性。文章还讨论了最佳实践,包括如何配置OAuth2客户端和资源服务器,以及如何处理常见的安全问题和错误。 ... [详细]
  • C++ 异步编程中获取线程执行结果的方法与技巧及其在前端开发中的应用探讨
    本文探讨了C++异步编程中获取线程执行结果的方法与技巧,并深入分析了这些技术在前端开发中的应用。通过对比不同的异步编程模型,本文详细介绍了如何高效地处理多线程任务,确保程序的稳定性和性能。同时,文章还结合实际案例,展示了这些方法在前端异步编程中的具体实现和优化策略。 ... [详细]
  • 在PHP中,高效地分割字符串是一项常见的需求。本文探讨了多种技术,用于在特定字符(如“或”)后进行字符串分割。通过使用正则表达式和内置函数,可以实现更加灵活和高效的字符串处理。例如,可以使用 `preg_split` 函数来实现这一目标,该函数允许指定复杂的分隔符模式,从而提高代码的可读性和性能。此外,文章还介绍了如何优化分割操作以减少内存消耗和提高执行速度。 ... [详细]
  • 在Android平台中,播放音频的采样率通常固定为44.1kHz,而录音的采样率则固定为8kHz。为了确保音频设备的正常工作,底层驱动必须预先设定这些固定的采样率。当上层应用提供的采样率与这些预设值不匹配时,需要通过重采样(resample)技术来调整采样率,以保证音频数据的正确处理和传输。本文将详细探讨FFMpeg在音频处理中的基础理论及重采样技术的应用。 ... [详细]
  • 线程能否先以安全方式获取对象,再进行非安全发布? ... [详细]
author-avatar
叫我小小小火枪的天空_603
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有