Javascript 有许多僵尸(X/Y变量、大小、运行状况),而无需单独手动创建每个僵尸

Javascript 有许多僵尸(X/Y变量、大小、运行状况),而无需单独手动创建每个僵尸,javascript,processing,processing.js,Javascript,Processing,Processing.js,我和我的朋友正在制作一个2D FPS游戏(不要问怎么做,要复杂),但我们有一个简单的系统,其中他们有3个僵尸,每个僵尸都有不同的命中框,这取决于他们的距离和健康状况。我们的问题是,我们想为这创造一个开放的世界(我们已经知道如何,不要再问了,变得复杂),我们不想为每个僵尸的健康、位置和大小(接近度)设定一个变量,我们怎么能在随机区域(在某个边界内随机)制造出许多僵尸,而他们每个仍然有命中框、健康度,诸如此类的事?我们知道这是可能的,就像在许多其他游戏中一样,但我们不知道如何做到这一点,我们正在使用

我和我的朋友正在制作一个2D FPS游戏(不要问怎么做,要复杂),但我们有一个简单的系统,其中他们有3个僵尸,每个僵尸都有不同的命中框,这取决于他们的距离和健康状况。我们的问题是,我们想为这创造一个开放的世界(我们已经知道如何,不要再问了,变得复杂),我们不想为每个僵尸的健康、位置和大小(接近度)设定一个变量,我们怎么能在随机区域(在某个边界内随机)制造出许多僵尸,而他们每个仍然有命中框、健康度,诸如此类的事?我们知道这是可能的,就像在许多其他游戏中一样,但我们不知道如何做到这一点,我们正在使用一个名为Processing.JS的JS框架

编辑

感谢@Kevin Workman给了我一些非常有用的代码,但仍然有一个问题,他给了每个僵尸一个唯一的X和Y,但不是唯一的健康的代码,我拿了他的代码,并试图修改它添加这个,但现在健康卡在100。有什么帮助吗

ArrayList<Zombie> zombies = new ArrayList<Zombie>();
void setup(){
   size(500, 500);
   for(int i = 0; i < 100; i++){
  zombies.add(new Zombie());
   }
}
void draw(){
   background(0);
   for(Zombie z : zombies){
      z.draw();
   }
}
class Zombie{
   float x = random(500);
   float y = random(500);
   float r = random(5, 20);
   float h = 100;
   void draw(){
      fill(0, 255, 0);
        if(h > 0) {
      ellipse(x, y, r, r);
        }
      if(mouseX > x - r/2 && mouseX < x + r/2 && mouseY > y - r/2 && mouseY < y + r/2 && mousePressed) {
    h --;
  }
  println(h);
  }
}
ArrayList zombies=new ArrayList();
无效设置(){
大小(500500);
对于(int i=0;i<100;i++){
添加(新僵尸());
}
}
作废提款(){
背景(0);
用于(僵尸z:僵尸){
z、 draw();
}
}
类僵尸{
浮动x=随机(500);
浮动y=随机(500);
浮动r=随机(5,20);
浮动h=100;
作废提款(){
填充(0,255,0);
如果(h>0){
椭圆(x,y,r,r);
}
if(mouseX>x-r/2&&mouseXy-r/2&&mouseY
如果这是一个单人游戏(即,没有网络/服务器),那么您可以简单地将运行状况(以及单个僵尸特定的其他详细信息)存储在僵尸对象中

下面是一个简单的基于jQuery/DOM的示例(很抱歉,它不是processing.js,但我以前没有使用过它,只是想提供一个快速而基本的示例):

小提琴:

$(函数(){
//名称空间
var ZOMBIEGAME=ZOMBIEGAME | |{};
//僵尸类
ZOMBIEGAME.zombie=函数(){
这是健康=3;
这个.x=0;
这个。y=0;
这个死=假;
this.takeDamage=功能(损坏){
这是健康-=损害;
如果(本健康指数<1){
这是真的;
}
}
}
//制作僵尸对象
var zombies=[];
对于(变量i=0;i<10;i++){
var z=新僵尸游戏。僵尸();
z、 x=数学地板(数学随机()*480);
z、 y=数学地板(数学随机()*480);
僵尸。推(z);
}
//制造DOM僵尸
对于(var i=0;i
正文{
字体系列:无衬线;
}
#游戏{
宽度:512px;
高度:512px;
位置:相对位置;
背景:ddd;
}
.僵尸{
宽度:32px;
高度:32px;
背景:A1D490;
位置:绝对位置;
}

点击僵尸3次以杀死


由于您使用的是Processing.js,因此可以使用类来封装需要跟踪的每个僵尸的数据。是使用类的Processing.js参考。一个简单的示例可能如下所示:

ArrayList<Zombie> zombies = new ArrayList<Zombie>();

void setup(){
   size(500, 500);
   for(int i = 0; i < 100; i++){
      zombies.add(new Zombie());
   }
}

void draw(){
   background(0);
   for(Zombie z : zombies){
      z.draw();
   }
}

class Zombie{
   float x = random(500);
   float y = random(500);
   float r = random(5, 20);

   void draw(){
      fill(0, 255, 0);
      ellipse(x, y, r, r);
   }
}
ArrayList zombies=new ArrayList();
无效设置(){
大小(500500);
对于(int i=0;i<100;i++){
添加(新僵尸());
}
}
作废提款(){
背景(0);
用于(僵尸z:僵尸){
z、 draw();
}
}
类僵尸{
浮动x=随机(500);
浮动y=随机(500);
浮动r=随机(5,20);
作废提款(){
填充(0,255,0);
椭圆(x,y,r,r);
}
}

“不要问,要[sic]复杂”是一种解释问题的可怕方式。使用3个僵尸对象的数组。这非常有效,我能够添加几行代码,当一个对象被单击时,它会降低其运行状况,唯一的问题是我无法弄清楚如何让每个对象都有单独的运行状况,并且使用其当前版本,当僵尸死的时候,我会让他们去死,如果我用这个代码去做的话,所有的僵尸都会去死。有没有办法让他们保持个人健康?@Cubit Games当然有。只需将
health
变量添加到
Zombie
类,就像它当前有
x
y
r
变量一样。每个实例都有自己的运行状况。如果无法使其工作,请在另一个问题中发布一个。我尝试在该类中的其他变量旁边放置一个新的浮点,现在运行状况仅为100,我的代码将处于编辑状态。好的,添加了编辑,这花费了很长时间。@Cubit Games您的新代码工作正常,你就是说不出来,因为所有100个僵尸都在打印他们的生命值,但只有你点击的一个僵尸的生命值降低。试着在一个僵尸身上按住鼠标几秒钟,它就会消失。或者,为了便于查看,只添加一个僵尸,而不是100个。您制作的演示效果很好,不幸的是,我不知道如何将此代码迁移到处理中,您制作的演示正是我想要的,只有方块被图像替换,它们有不同的独立大小,谢谢你的贡献!