我正在开发一个用普通javascript制作的RPG游戏项目只是为了好玩,但似乎无法理解javascript内置类是如何工作的,因为它们的行为与我在Java或C#中的习惯有很大不同。所以这就是问题所在:
如果我按照以下方式制作了自定义类:
Class Player_animation{
constructor(animationX,animationY,animation_state,xPos,yPos,destX,destY){
this.animationX = animationX;
.
. (the basic setup for all the attributes as the first one);
.
set animationX(value){
this._animationX = value;
}
//all the setters as that one
update(){
if(this._animationX===480 && this._animation_state==='idle')
this._animationX=0;
else if(this._animationX===720 && this._animation_state !== 'attack'){
this._animationX=0;
}
else if(this._animationX===840){
this._animationX=0;
this._animationY = 0;
this._animation_state = 'idle';
}
if(this._xPos!== this._destX || this._yPos!== this._destY){
if(this._xPos<this._destX){
this._animation_state = 'facing_right';
this._animationY = 240;
}
if(this._xPos>this._destX){
this._animation_state = 'facing_left';
this._animationY = 360;
}
}
else{
if(this._animation_state === 'facing_right')
this._animationY = 0;
if(this._animation_state === 'facing_left')
this._animationY = 120;
if(this._animation_state!=='attack'){
this._animation_state = 'idle';
}
}
}
}
我可以在我的程序中调用一个新制作的类对象没问题:
var player_animation = new Player_animation(0,0,'idle',0,0,0,0);
player_animation.update();
我可以以某种方式创建我使用该函数调用的这些自定义类的数组。我尝试过以下两种方法:
var array = [];
array.push[player_animation,player_animation2];
for(var unit in array){
unit.update();
}
我试过的第二种方法不起作用:
var array = [];
array.push[player_animation,player_animation2];
for(var i = 0; i < array.Lenght; i++){
array[i].update();
}
工作代码经历了这个循环(我知道我应该在这里限制fps):
function frame(){
update();
requestAnimationFrame(frame);
}
function update(){
player_animation.update();
enemy_animation.update();
}
requestAnimationFrame(frame);
在普通的javascript中甚至可以这样吗? 我的游戏循环和更新工作正常,所有定义的对象分别调用,但在游戏中有10个以上的对象之后会很麻烦。 在Java中,我能够将所有game_object存储在一个数组中,其中的函数将通过for循环调用,因此很难理解为什么它在javascript中不起作用。
答案 0 :(得分:0)
你遇到很多问题,其中没有一个与JavaScript中的类如何相关。
array.push[player_animation,player_animation2];
push
是功能。您可以使用()
而不是[]
来调用它。
for(var unit in array){
in
遍历对象中的属性名称。避免将它用于数组。如果您确实使用它,那么您需要array[unit]
来获取值,而不仅仅是unit
。
for(var i = 0; i < array.Lenght; i++){
length
而非Lenght
。