Objekte zur Laufzeit erzeugen


Sehr häufig fügen Spiele oder Apps zur Laufzeit neue Objekte hinzu, vielleicht als Reaktion auf den Nutzer oder um einen visuellen Effekt zu erzeugen.

Im Wonderland Engine kannst Du Objekte aus einer benutzerdefinierten JavaScript-Komponente entweder mit [Scene.addObject](/scene/#addObject) oder [Scene.addObjects](/scene/#addObject) erstellen.

## Ein einzelnes Objekt hinzufügen

Das Hinzufügen eines einzelnen Objekts erfolgt über [Scene.addObject](/scene/#addObject):

```js
import {Component, Property} from '@wonderlandengine/api';

export class Spawner extends Component {
  static TypeName = 'spawner';
  static Properties = {
    mesh: Property.mesh(),
    material: Property.material(),
  };

  start() {
    /* Erstelle ein neues Objekt mit this.object als Eltern */
    const o = this.engine.scene.addObject(this.object);

    /* Ein Mesh anhängen */
    o.addComponent('mesh', {
      mesh: this.mesh,
      material: this.material,
    });
  }
}

Viele Objekte hinzufügen 

Zum Hinzufügen mehrerer Objekte bietet Scene.addObjects eine bessere Leistung:

import {Component, Property} from '@wonderlandengine/api';

export class BatchSpawner extends Component {
  static TypeName = 'batch-spawner';
  static Properties = {
    mesh: Property.mesh(),
    material: Property.material(),
    count: Property.int(10),
  };

  start() {
    /* 'count' neue Objekte mit this.object als Eltern erzeugen und
     * Wonderland Engine mitteilen, dass wir 'count' Komponenten benötigen (eine pro Objekt) */
    const objs = this.engine.scene.addObjects(10, this.object, this.count);

    /* Meshes anhängen */
    for(let o of objs) {
      o.addComponent('mesh', {
        mesh: this.mesh,
        material: this.material,
      });
      /* Objekt an zufälliger Position im 10x10x10 Würfelvolumen platzieren */
      o.translate([Math.random()*10, Math.random()*10, Math.random()*10]);
    }
  }
}