[知了堂学习笔记]_纯JS制作《飞机大战》游戏_第2讲(对象的实现及全局变量的定义)
整体展示:

一、全局变量
/*===================玩家参数==========================*/
var myPlane; //英雄对象
var leftbtn = false; //左移动标志
var rightbtn = false; //右移动标志
var topbtn = false; //上移动标志
var bottombtn = false; //下移动标志
var shot = false; //射击标志
//var bulletStatus = false; //子弹
var score = 0; //得分
var killNum = 0; //杀敌数
var shotboom = false; //必杀标志
var pass = 1;//关卡
var mainobj = document.getElementById("main"); //获取游戏div元素
/*===================集合==========================*/
var bulletList = new Array(); //英雄子弹集合
var boomList = new Array(); //必杀集合
var boosList = new Array(); //boos集合
var enemyList = new Array(); //敌机集合
var boosBullet = new Array(); //boos子弹集合
var toolList = new Array(); //道具集合
/*====================计时器=========================*/
var ctrlmove; //英雄移动计时器
var ctrlshot; //英雄射击计时器
var bulletfly; //子弹移动计时器
var createenemy; //敌机生成计时器
var enemymove; //敌机移动计时器
var hitplane; //击中判断计时器
var exist; //判断对象存在与否计时器
二、飞机对象
/**
* 飞机对象
* @param {Object} src 飞机图片路径
* @param {Object} x x坐标
* @param {Object} y y坐标
* @param {Object} speed 飞机移动速度
* @param {Object} blood 飞机血量
*/
function createPlane(src, x, y, speed, blood) {
this.planeNode = document.createElement("img"); //飞机图片节点,用于主界面中显示
this.src = src;
this.x = x;
this.y = y;
this.speed = speed;
this.blood = blood;
this.level = 1; //等级
this.boom = 5; //必杀数量
//飞机左移动,需要判断是否飞出主界面左侧,如果移出,则从右边出现
this.leftMove = function() {
if (this.planeNode.style.left == "-60px")
this.planeNode.style.left = "440px";
else {
this.planeNode.style.left=parseInt(this.planeNode.style.left) - this.speed +"px";
}
};
//飞机右移动,需要判断是否飞出界面,飞出则从左边出现
this.rightMove = function() {
if (this.planeNode.style.left == "440px"){
this.planeNode.style.left = "-60px";
}
else {
this.planeNode.style.left=parseInt(this.planeNode.style.left) + this.speed +"px";
}
};
//飞机上移动,当移动到一定值时则不能移动
this.topMove = function() {
if (this.planeNode.style.top == "-10px"){ }
else {
this.planeNode.style.top=parseInt(this.planeNode.style.top) - this.speed +"px";
}
};
//飞机下移动,当移动到一定值时,则不能移动
this.botoomMove = function() {
if (this.planeNode.style.top == "600px"){ }
else {
this.planeNode.style.top=parseInt(this.planeNode.style.top) + this.speed +"px";
}
}; //在页面上创建飞机,设置css属性
this.create = function() {
this.planeNode.src = this.src;
this.planeNode.style.position = "absolute";
this.planeNode.style.left = this.x + "px";
this.planeNode.style.top = this.y + "px";
this.planeNode.style.zIndex = 6;
mainobj.appendChild(this.planeNode);//在游戏界面中添加飞机节点并显示
};
//发射子弹
this.shot = function(){
var bullet1 = new createBullet("img/img_bullet.png",parseInt(this.planeNode.style.left),parseInt(this.planeNode.style.top),this.speed);
bulletList.push(bullet1);
var bullet2 = new createBullet("img/img_bullet.png",parseInt(this.planeNode.style.left)+50,parseInt(this.planeNode.style.top),this.speed);
bulletList.push(bullet2);
}
//释放必杀
this.shotBoom=function(){
if(this.boom>0){
var boom1 = new createBullet("img/daodan1.png",parseInt(this.planeNode.style.left)+20,parseInt(this.planeNode.style.top),this.speed);
boomList.push(boom1);
this.boom--;
}
} this.create();
}
三、敌机对象
/**
* 敌人飞机对象
* @param {Object} src
* @param {Object} x
* @param {Object} y
* @param {Object} speed
* @param {Object} blood
*/
function createEnemyPlane(src,x,y,speed,blood){
this.src = src;
this.x = x;
this.y = y;
this.blood = blood;
this.speed = speed;
this.isdead = false; //是否死亡
this.deadtime = 10; //移除时间(计时器时间*10),用于爆炸效果
this.enemyNode = document.createElement("img"); this.create = function(){
this.enemyNode.src = this.src;
this.enemyNode.style.position = "absolute";
this.enemyNode.style.left = this.x +"px";
this.enemyNode.style.top = this.y+"px";
this.enemyNode.style.zIndex = 6;
mainobj.appendChild(this.enemyNode);
}; this.move = function(){
this.enemyNode.style.top=parseInt(this.enemyNode.style.top) + this.speed +"px";
}; this.rightMove=function(){
this.enemyNode.style.left=parseInt(this.enemyNode.style.left) + this.speed +"px";
}; this.leftMove=function(){
this.enemyNode.style.left=parseInt(this.enemyNode.style.left) - this.speed +"px";
}; this.shot=function(){ };
/**
* boos射击
* 很据英雄的level不同,boos的子弹不同
*/
this.boosShot=function(){
if(myPlane.level==1){
var bullet = new createBullet("img/wp2.png",parseInt(this.enemyNode.style.left)+22,parseInt(this.enemyNode.style.top),this.speed);
boosBullet.push(bullet);
}
if(myPlane.level==3){
var bullet = new createBullet("img/wp3.png",parseInt(this.enemyNode.style.left)+26,parseInt(this.enemyNode.style.top),this.speed);
boosBullet.push(bullet);
}
};
this.create(); }
四、子弹对象
/**
* 子弹对象
* @param {Object} src
* @param {Object} x
* @param {Object} y
* @param {Object} speed
*/
function createBullet(src,x,y,speed){
this.src = src;
this.x = x;
this.y = y;
this.speed = speed;
this.ishit = false; //子弹是否击中
this.boomStop = 50; //必杀移动时间
this.boomTime = 100; //必杀移除时间
this.bulletNode = document.createElement("img"); this.create = function(){
this.bulletNode.src = src;
this.bulletNode.style.position = "absolute";
this.bulletNode.style.left = this.x+"px";
this.bulletNode.style.top = this.y + "px";
this.bulletNode.style.zIndex = 6;
mainobj.appendChild(this.bulletNode);
}; this.move = function(){
this.bulletNode.style.top = parseInt(this.bulletNode.style.top)-this.speed +"px";
}; this.downMove=function(){
this.bulletNode.style.top = parseInt(this.bulletNode.style.top)+this.speed +"px";
}
this.create();
}
五、道具对象
function createTool(src,x,y,speed,tooltype){
this.src = src;
this.x = x;
this.y = y;
this.speed = speed;
this.getme = false;
this.tooltype = tooltype;//道具类型 1为加boom 2为加血,
this.toolNode = document.createElement("img");
this.create=function(){
this.toolNode.src=this.src;
this.toolNode.style.top=this.y+"px";
this.toolNode.style.left=this.x+"px";
this.toolNode.style.position="absolute";
this.toolNode.style.zIndex=6;
mainobj.appendChild(this.toolNode);
}
this.move=function(){
this.toolNode.style.top=parseInt(this.toolNode.style.top) + this.speed +"px";
}
this.create();
}
其实在这些对象中,很多代码都是类似的,只要能实现一个对象,在仔细想一想其他对象的特性,结合下代码很快能实现。
下一讲,则会实现各种处理方法了,让游戏活起来。
以上为今天的第一讲,如需了解更加深入的知识,请大家进入知了堂社区:http://www.zhiliaotang.com/portal.php
[知了堂学习笔记]_纯JS制作《飞机大战》游戏_第2讲(对象的实现及全局变量的定义)的更多相关文章
- [知了堂学习笔记]_纯JS制作《飞机大战》游戏_第1讲(实现思路与游戏界面的实现)
整体效果展示: 一.实现思路 如图,这是我完成该项目的一个逻辑图,也是一个功能模块完成的顺序图. 游戏界面的完成 英雄飞机对象实现,在实现发射子弹方法过程中,又引出了子弹对象并实现.在此时,英雄飞机能 ...
- 【知了堂学习笔记】java 自定义异常
java 常见异常种类(Java Exception): 算术异常类:ArithmeticExecption 空指针异常类:NullPointerException 类型强制转换异常:ClassCas ...
- [知了堂学习笔记]_纯JS制作《飞机大战》游戏_第3讲(逻辑方法的实现)
整体展示: 上一讲实现了诸多对象,这次我们就需要实现许多逻辑方法,如控制飞机移动,判断子弹击中敌机,敌机与英雄飞机相撞等等.并且我们在实现这些功能的时候需要计时器去调用这些方法.setInterval ...
- [知了堂学习笔记]_用JS制作《飞机大作战》游戏_第3讲(玩家发射子弹)
一.公布上一讲中玩家飞机上.下.右移动实现的代码: /*=========================键盘按下事件 keycode为得到键盘相应键对应的数字==================== ...
- [知了堂学习笔记]_牵线Eclipse和Tomcat第二篇 —— 安装Tomcat&&添加Tomcat到Eclipse
来了来了~~~~~我们的"织女"--Tomcat来了,牛郎们等急了吧!哈哈! 一.安装Tomcat 下载地址:http://tomcat.apache.org/download-7 ...
- [知了堂学习笔记]_牵线Eclipse和Tomcat第一篇 —— 配置Java环境变量&&安装eclipse
一.先给他们提供一个"浪漫的"环境,比如传说中的"鹊桥"--java环境变量.哈哈! 配置java环境变量. 下载jdk,根据自己电脑的版本和操作位数选择不同的 ...
- [知了堂学习笔记]_ajax的两种使用方式
一.Ajax概述 1.什么是同步,什么是异步 同步现象:客户端发送请求到服务器端,当服务器返回响应之前,客户端都处于等待 卡死状态 异步现象:客户端发送请求到服务器端,无论服务器是否返回响应,客户端都 ...
- 【知了堂学习笔记】java web 简单的登录
最近皮皮潇在学习java web,刚接触了简单的东西,所以今天给大家带来一个简单的登录实现. 页面: 页面代码: <%@ page language="java" conte ...
- [知了堂学习笔记]_JSON数据操作第1讲(初识JSON)
一.认识JSON 什么是JSON? JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式..它基于 ECMAScript (w3c制定的js规 ...
随机推荐
- Java 接口-抽象类解析
对于面向对象编程,抽象是它的三大特征(抽象.继承.多态)之一.在Java中,可以通过两种形式来体现OOP的抽象:接口和抽象类. 这两者既相似又存异.诸位在初学的时候也会傻傻分不清接口与抽象类的区别,大 ...
- spring加载异常
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource' ...
- 设计模式(3)抽象工厂模式(Abstract Factory)
设计模式(0)简单工厂模式 设计模式(1)单例模式(Singleton) 设计模式(2)工厂方法模式(Factory Method) 源码地址 0 抽象工厂模式简介 0.0 抽象工厂模式定义 抽象工厂 ...
- (转)CentOS6.5下Redis安装与配置
场景:项目开发中需要用到redis,之前自己对于缓存这块一直不是很理解,所以一直有从头做起的想法. 本文详细介绍redis单机单实例安装与配置,服务及开机自启动.如有不对的地方,欢迎大家拍砖o(∩_∩ ...
- (转)spring学习之@ModelAttribute运用详解
@ModelAttribute使用详解 1 @ModelAttribute注释方法 例子(1),(2),(3)类似,被@ModelAttribute注释的方法会在此controller每个方法执行前被 ...
- bootstrap-table 怎么自定义搜索按钮实现点击按钮进行查询
bootstrap-table自带搜索框感觉有点丑,我们可以把搜索功能单独拉出来放到页面的某一个位置. 首先我们看一下官方演示: 如果你感觉集成的检索框不太好看,而且我们也不想让搜索框和列表放到一块去 ...
- HDOJ2002-计算球体面积
Problem Description 根据输入的半径值,计算球的体积. Input 输入数据有多组,每组占一行,每行包括一个实数,表示球的半径. Output 输出对应的球的体积,对于每组输 ...
- 7.spark共享变量
spark共享变量 1 Why Apache Spark 2 关于Apache Spark 3 如何安装Apache Spark 4 Apache Spark的工作原理 5 spark弹性分布式数据集 ...
- ServletContext对象统计在线人数
package com.zdsofe.servlet1; import java.io.IOException; import java.io.PrintWriter; import javax.se ...
- ETL作业调度工具TASKCTL软件安装乱码问题解决
前两天在安装批量作业调度软件TASKCTL4.5时,将安装介质解压出来后执行安装脚本时,一安装就出现下图乱码. 然后就度娘了一下,发现安装遇到乱码的人还挺多的,大多数解答都说TASKCTL软件里面很多 ...