创建同一个对象的多个实例,并只select一个

我正在玩弄一个益智游戏,在我遇到第一个问题之前,没有做太多的事情。 我想创建一定数量的相同的对象/function。 但是没有硬编码的不同情况。

我想也许arrays是一个好主意? 然后一个for循环push的对象? 然后我需要能够通过点击select这些对象之一,我将如何做到这一点? 我怎么知道arrays中的哪个球被点击了? 再次循环?

我做了一个jsFiddle的例子(你需要点击橙色的球来select,然后你可以通过点击canvas来移动它)。 这是我想要做的,但有更多的球。 你将如何解决这个问题?

这里有几个问题。

  1. 将多个对象实例存储在内存中

这通常是使用数组或更复杂的数据结构来完成的。 您可以使用单个数组来保存所有内容(例如,使用多态),或者为每个对象types使用一个数组。 哪一个更好取决于你的对象将有什么样的行为。

对象不需要存储在variables中,它们可以是数组成员。 你可以做

 a = new Array(); a.push(new MyGameObject(some params ... )); 

或者(更典型的),您可以临时将对象分配给函数中的局部variables,然后设置一些属性或调用初始化方法

 function init_everything() // Call this when your game starts, or when a new level starts etc. { objects_list = new Array(); } function add_a_new_thingy() { var t = new Thingy(); t.someproperty = 42; t.init_method(); objects_list.push(t); } 

然后多次调用add_a_new_thingy。

  1. 在游戏或关卡开始时以某种模式初始化某些对象

在游戏开始的时候,或者在一个关卡开始的时候,你可能需要在你的全局数组(或者数组,如果你有多个)中设置一些已知状态的对象。

最简单的方法:将每个级别的代码硬编码为一个Javascript函数,从而创建它们(注意:您不需要将其与其他东西放在同一个.js文件中)。

稍微复杂一些的方法:创建一些JS数据结构,读取它们来创建对象:

 var level1_things = [ { type:"monster", x:42, y:99 }, { type:"bonus", x:128, y:100 } ]; 

更复杂的方式:使用XMLHttpRequest从服务器以其他格式读取它们。

例如,你可以parsing一个文本文件,其中某些字符表示对象的types,所以如果你做了一个Sodokutypes的游戏,你有一个“W”代表“墙”,“P”代表“玩家”,“B “为框,”T“为目标或东西(可能是一个空的瓷砖的空白空间)。

你可以使用JSON来存储你的对象,这是我知道的在Javascript中序列化对象的最简单的方法。

然后对于你的挑选,一个带有边界框或球体testing的for循环就可以做到这一点。 如果你有大量的对象,遇到性能问题,你需要一些空间分区系统,比如四叉树。