Pointer Messages

Source code

class MyGame extends GameObject {
  constructor() {
    super();

    Black.stage.scaleMode = StageScaleMode.LETTERBOX;
    Black.stage.setSize(500, 500);

    var assets = new AssetManager();
    assets.enqueueImage('square', '/assets/examples/popart_iphone_1.png');
    assets.on('complete', this.onAssetsLoaded, this);
    assets.loadQueue();
  }

  onAssetsLoaded(m) {
    // IMPORTANT: make this object touchable so children can also receive input messages
    // Same as touchable = true;
    this.addComponent(new InputComponent());

    // Create a sprite
    this.sprite = new Sprite('square');
    this.sprite.name = 'sprite';
    this.sprite.x = 500 / 2;
    this.sprite.y = 500 / 1.8;
    this.sprite.scaleX = this.sprite.scaleY = 1.5;
    this.sprite.alpha = 1;
    this.sprite.alignPivot();
    this.sprite.addComponent(new InputComponent());
    this.addChild(this.sprite);

    // Listen for sprite input events
    this.sprite.on('pointerDown', this.onPointerEvent, this);
    this.sprite.on('pointerMove', this.onPointerEvent, this);
    this.sprite.on('pointerUp', this.onPointerEvent, this);

    // Listen for global events
    Black.input.on('pointerDown', this.onGlobalPointerEvent, this);
    Black.input.on('pointerMove', this.onGlobalPointerEvent, this);
    Black.input.on('pointerUp', this.onGlobalPointerEvent, this);

    // Add debug text field
    this.spriteText = new TextField('Click on sprite!', 'arial', 0xf6a200, 25);
    this.spriteText.x = 500 / 2;
    this.spriteText.y = 50;
    this.spriteText.align = 'center';
    this.spriteText.textColor = 0xf6a200;
    this.spriteText.alignPivot();
    this.addChild(this.spriteText);

    this.globalText = new TextField('x: 0, y: 0', 'arial', 0xf6a200, 25);
    this.globalText.x = 500 / 2;
    this.globalText.y = 100;
    this.globalText.align = 'center';
    this.globalText.textColor = 0xf6a200;
    this.globalText.alignPivot();
    this.addChild(this.globalText);
  }

  onPointerEvent(msg) {
    this.spriteText.text = 'Sprite ' + msg.name;
    this.spriteText.alignPivot();
  }

  onGlobalPointerEvent(msg) {
    this.spriteText.text = 'Global ' + msg.name;
    this.spriteText.alignPivot();

    this.globalText.text = `x: ${~~Black.input.pointerX}, y: ${~~Black.input.pointerY}`;
    this.globalText.alignPivot();

  }

  onUpdate() {
    if (Black.assets.isAllLoaded === false)
      return;

    this.sprite.rotation += 1 * Black.time.delta;
  }
}

var engine = new Engine('game-container', MyGame, CanvasDriver, [Input]);
engine.start();