拥有许多僵尸(X / Y变量,大小,健康)而无需单独手动创建每个僵尸

时间:2015-11-12 22:54:45

标签: javascript processing processing.js

我和我的朋友正在制作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);
  }
}

2 个答案:

答案 0 :(得分:3)

由于您正在使用Processing.js,因此您可以使用封装您需要跟踪每个僵尸所需的数据。 Here是使用类的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);
   }
}

答案 1 :(得分:0)

如果这是一个单人游戏(即没有网络/服务器),那么你可以简单地将健康(以及其他单个僵尸特定细节)存储在僵尸对象中。

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

小提琴:https://jsfiddle.net/dg5p6c08/

&#13;
&#13;
$(function() {
    // namespace
    var ZOMBIEGAME = ZOMBIEGAME || {};
    // zombie class
    ZOMBIEGAME.zombie = function () {
        this.health = 3;
        this.x = 0;
        this.y = 0;
        this.dead = false;
        this.takeDamage = function (damage) {
            this.health -= damage;
            if (this.health < 1) {
                this.dead = true;
            }
        }
    }
	// make zombie objects
    var zombies = [];
    for (var i = 0; i < 10; i++) {
        var z = new ZOMBIEGAME.zombie();
        z.x = Math.floor(Math.random() * 480);
        z.y = Math.floor(Math.random() * 480);
        zombies.push(z);
    }
	// make DOM zombies
    for (var i = 0; i < zombies.length; i++) {
        var zDom = '<div class="zombie" data-id="' + i + '" style="top: '
        	+ zombies[i].y + 'px; left: ' + zombies[i].x + 'px;"></div>';
        $('#game').append(zDom);
    }
    // click zombies
    $('.zombie').on('click', function() {
    	var id = parseInt($(this).attr('data-id'));
        zombies[id].takeDamage(1);
        if (zombies[id].dead) {
            $(this).css('background', '#bbb');
        }
    });
});
&#13;
body {
    font-family: sans-serif;
}
#game {
    width: 512px;
    height: 512px;
    position: relative;
    background: #ddd;
}
.zombie {
    width: 32px;
    height: 32px;
    background: #A1D490;
    position: absolute;
}
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<p>Click zombies 3 times to kill.</p>
<div id="game"></div>
&#13;
&#13;
&#13;