我在解决HTML5游戏的下面代码时遇到了一些问题。这就是我的想法,并且想知道我的理解是否正确?
1)调用实体函数时,会创建对象SELF及其方法(测试碰撞)
2)当创建Enemy对象时,它会调用函数' actor'和INHERITS来自SELF对象的函数(因为self指的是它自己)但它也是INHERITS的perform.attack方法
我不确定为什么要返回该对象,但简而言之,通过创建SELF对象,我们可以共享方法,行为和属性,以便我们创建DRY代码?
我希望我的理解是正确的?
Entity = function(type,id,x,y,spdX,spdY,width,height,color){
// a function to call
var self = {
type:type,
x:x,
spdX:spdX,
y:y,
spdY:spdY,
width:width,
height:height,
color:color,
};
self.testCollision = function(entity2){
var rect1 = {
x:self.x-self.width/2,
y:self.y-self.height/2,
width:self.width,
height:self.height,
}
var rect2 = {
x:entity2.x-entity2.width/2,
y:entity2.y-entity2.height/2,
width:entity2.width,
height:entity2.height,
}
return testCollisionRectRect(rect1,rect2);
}
return self;
}
//---------actor can be an enemy or player in the game-----//
Actor = function(type,id,x,y,spdX,spdY,width,height,color){
var self = Entity(type,id,x,y,spdX,spdY,width,height,color);
self.attackCounter = 0;
self.aimAngle = 0;
self.atkSpd = 1;
self.performAttack = function(){
if(self.attackCounter > 25){ //every 1 sec
self.attackCounter = 0;
generateBullet(self);
}
}
return self;
}
// ------------------Create the enemy function----------- //
Enemy = function(id,x,y,spdX,spdY,width,height){
var self = Actor('enemy',id,x,y,spdX,spdY,width,height,'red');
enemyList[id] = self;
}
randomlyGenerateEnemy = function(){
//Math.random() returns a number between 0 and 1
var x = Math.random()*WIDTH;
var y = Math.random()*HEIGHT;
var height = 10 + Math.random()*30; //between 10 and 40
var width = 10 + Math.random()*30;
var id = Math.random();
var spdX = 5 + Math.random() * 5;
var spdY = 5 + Math.random() * 5;
Enemy(id,x,y,spdX,spdY,width,height);
}
感谢您的帮助。 P
答案 0 :(得分:1)
JavaScript没有本机继承。 JavaScript甚至没有继承的类 - 但是JS6有类。
Entity
是一家创建&返回带有属性&的匿名self
个对象一个testCollision方法。
Actor
从实体请求新对象。演员添加属性&对请求的对象执行performAttack方法并返回该扩展对象。
Enemy
从Actor请求一个新对象。敌人将该对象添加到数组中。
如果我们只检查此代码
如果这是Entity&使用Actor然后代码不一定分成几部分。整个最终对象(包括所有属性和所有方法)可以在randomlyGenerateEnemy
中最有效地构建。
如果有更多代码使用Entity&演员强>
据推测(!)......
实体创建所有游戏片段(片段==字符,结构等)共有的属性和方法。借用一个数学短语,Entity使用"最常见的分母"创建一个对象。
Actor使用Actor游戏角色固有的属性和方法来增强基本的Entity对象。
Enemy只是将新的Actor对象添加到enemyList
。
据推测,可能还有一个Structure
函数(像Actor一样)使用Structure游戏块固有的属性和方法来增强基本的Entity对象。
据推测,可能还有一个Buildings
函数(像Enemy)只是将一个新的Structure对象添加到buildingsList
。
由于实体代码正被Actor&假定代码中的结构,假定的代码将使用DRY(不要重复自己)编码模式。