Egret学习-坦克大战开发(二)

现在开始写具体实现代码

1.加载TiledMap

 1     /**
 2      * 创建游戏场景
 3      * Create a game scene
 4      */
 5     private createGameScene() {
 6         let sky = this.createBitmapByName("bg_jpg");
 7         this.addChild(sky);
 8
 9         /*加载地图*/
10         /*初始化资源加载路径*/
11         this.url = "resource/640bg.tmx";
12         /*初始化请求*/
13         this.request = new egret.HttpRequest();
14         /*监听资源加载完成事件*/
15         this.request.once( egret.Event.COMPLETE,this.onMapComplete,this);
16         /*发送请求*/
17         this.request.open(this.url,egret.HttpMethod.GET);
18         this.request.send();
19     }

2.在加载完成后将地图添加到游戏

/*地图加载完成*/
private onMapComplete(event:egret.Event) {
        /*获取到地图数据*/
        var data:any = egret.XML.parse(event.currentTarget.response);
        /*初始化地图*/
        this.tmxTileMap = new tiled.TMXTilemap(640, 640, data, this.url);
        this.tmxTileMap.render();
        this.tmxTileMap.once(egret.Event.ADDED_TO_STAGE, this.onMapAddToStage, this);
        /*将地图添加到显示列表*/
        this.addChild(this.tmxTileMap);
} 

3.地图显示后,还要添加一些初始的游戏角色,玩家坦克,敌方坦克

 1         let groups = this.tmxTileMap.getObjects();
 2         let group0 = groups[0];
 3         group0.draw();
 4         // 3为tiledmap中的对象Id
 5         let pl1:tiled.TMXObject = group0.getObjectById(3);
 6         // 创建玩家坦克
 7         let tank1 = new Tank(‘player1‘, ‘up‘, ‘player‘);
 8         tank1.x = pl1.x + 17.5;
 9         tank1.y = pl1.y + 17.5;
10         this.tmxTileMap.addChild(tank1);

4.需要创建坦克类,封装一些基本的操作

1)基本的属性,

图片前缀player,坦克图片名称类似player_up_png,一个方向一个,共四个方向

方向,当前坦克的方向

阵营,玩家,敌方

2)基本方法

转向

代码如下

 1 class Tank extends egret.DisplayObjectContainer {
 2
 3     /* 图片前缀 */
 4     private name_prefix:string;
 5     /* 方向 */
 6     private dir:string;
 7     /* 阵营 */
 8     private camp:string;
 9
10     private img:egret.Bitmap;
11
12     public constructor(prefix:string, dir:string, camp:string) {
13         super();
14         this.name_prefix = prefix;
15         this.dir = dir;
16         this.camp = camp;
17         this.anchorOffsetX = 17.5;
18         this.anchorOffsetY = 17.5;
19         this.once(egret.Event.ADDED_TO_STAGE, this.onAddToStage, this);
20     }
21
22     private onAddToStage() {
23         this.img = new egret.Bitmap();
24         this.img.texture = RES.getRes(this.name_prefix + ‘_‘ + this.dir + ‘_png‘);
25         this.addChild(this.img);
26     }
27
28     /** 转向 */
29     public turn(dir) {
30         if(this.dir === dir) {
31             return;
32         }
33         this.dir = dir
34         this.img.texture = RES.getRes(this.name_prefix + ‘_‘ + this.dir + ‘_png‘);
35     }
36 }
this.anchorOffsetX = 17.5;
this.anchorOffsetY = 17.5;设置显示对象的锚点,egret默认的锚点为左上角,根据坦克的大小为35,所以修改到对象的中心

原文地址:https://www.cnblogs.com/woaitech/p/12238968.html

时间: 2024-10-09 22:22:14

Egret学习-坦克大战开发(二)的相关文章

Egret学习-坦克大战开发

学习了几天Egret,基本的语法和用法了解的差不多了,现在开始写一个坦克大战练习下,实践是最好的学习方式 首先确定下开发内容,概要设计 1.加载一个TiledMap,作为游戏地图 2.坦克分为两个阵营,玩家和敌方 3.有砖块和石头作为障碍物,坦克不能穿过 4.通过鼠标控制玩家坦克移动,坦克移动到鼠标点击的位置,简单的寻路,先左右移,后上下移动,遇到障碍物则停止 5.鼠标点击坦克,坦克发射子弹, 1)子弹遇到敌方,敌方坦克消失,子弹消失, 2)子弹遇到砖块,砖块消失,子弹消失 3)子弹遇到石头,石

Egret学习-坦克大战开发(三)

实现玩家坦克的移动 基本流程 1.鼠标点击目标位置 2.坦克移动到指定位置,不能斜向移动,只能水平或垂直移动 3.可以简单寻路,如果中途遇到障碍,自动转向, 鼠标点击目标位置,将位置记录在坦克,在循环中移动到目标位置,同时判断是否遇到障碍, 给背景添加鼠标点击事件 1 let bg = this.createBitmapByName("bg_jpg"); 2 this.addChild(bg); 3 bg.touchEnabled = true; 4 bg.addEventListen

Egret学习-坦克大战开发-总结

用了几天开发游戏,现在回头整理下知识 首先附上源码,下载地址 http://www.521100.net/forum.php?mod=viewthread&tid=26&extra=page%3D1 1.Egret 主循环,用于实现业务逻辑更新游戏进度 egret.lifecycle.addLifecycleListener((context) => { context.onUpdate = () => { if(!this.init) { return; } if(this.

Egret学习-坦克大战开发(五)

玩家的功能已经全部完成,开始完成敌方的AI 敌方坦克也可以随机做一下几个动作 1.移动,2.发射子弹,3.转向 为了看起来效果更好一点,移动应该最大比例,发射子弹和转向应该比较少 首先要有个随机方法 1 public randomNum(minNum:number,maxNum:number){ 2 switch(arguments.length){ 3 case 1: 4 return Math.random()*minNum+1; 5 case 2: 6 return Math.random

javaweb学习之Servlet开发(二)

javaweb学习总结(六)--Servlet开发(二) 一.ServletConfig讲解 1.1.配置Servlet初始化参数 在Servlet的配置文件web.xml中,可以使用一个或多个<init-param>标签为servlet配置一些初始化参数. 例如: 1 <servlet> 2 <servlet-name>ServletConfigDemo1</servlet-name> 3 <servlet-class>gacl.servlet

unity3D学习—坦克大战(一)

背景介绍 本人一名C#程序员,从事C#开发已经有四年有余了,目前在一家大型公司上班.鉴于公司的业务需要,现在需要学习unity3D游戏开发,好在unity支持C#脚本开发,无形中省下了许多重新学习新语言的时间.好了,闲话不多说,开始正式学习之路. 本篇文章主要介绍unity的相关背景和下载安装等,使用的unity开发软件为当前最新5.3.5版本. 第一步,使用各大搜索引擎搜索关键字:unity 此处以百度搜索为例,红线框起来的是unity的官方网站,其网址为http://unity3d.com/

用javascript 面向对象制作坦克大战(二)

2.   完善地图 我们的地图中有空地,墙,钢,草丛,水,总部等障碍物. 我们可以把这些全部设计为对象. 2.1  创建障碍物对象群 对象群保存各种地图上的对象,我们通过对象的属性来判断对象是否可以被穿过或被攻击. Barrier.js:   2.2    写入地图的数据. 在Common.js 中添加以下代码:   2.3    绘制地图 准备工作做完了,下面开始上大菜,绘制地图.前面有提到我们的地图为 13 * 13 的表格.所以我们在游戏装载对象添加行和列两个属性,并且添加初始化地图方法.

Java坦克大战(一)

接下来的几篇博客,想记录一下通过学习坦克大战项目来循序渐进的学习Java基础.主要是为了巩固基础知识,当然学习编程重要的还是多敲,问题通常是在敲代码的过程中发现的,积累也是在敲代码中寻求的经验.这个坦克大战项目是利用Java图形界面来做的,比较简陋.但是,在不断的往里面加功能的时候,可以学到很多知识,最重要的还是体会Java的面向对象编程思想.下面介绍几个用的上的Demo,最后是坦克大战的1.0版本. Demo1:回顾事件处理机制 /* * 功能:事件处理机制(ActionListener的应用

《Java小游戏实现》:坦克大战(续三)

<Java小游戏实现>:坦克大战(续三) 相关博文: <Java小游戏实现>:坦克大战http://blog.csdn.net/u010412719/article/details/51712663 <Java小游戏实现>:坦克大战(续一):http://blog.csdn.net/u010412719/article/details/51723570 <Java小游戏实现>:坦克大战(续二):http://blog.csdn.net/u010412719/