company logo
advertisement for deep fried Twinkies


Phaser 事件系统中的例子


//这里的给对像添加开始拖动和停止拖动事件很有用。
var game = new Phaser.Game(800, 600, Phaser.AUTO, 'phaser-example', { preload: preload, create: create, render: render });

function preload() {

    game.load.image('grid', 'assets/tests/debug-grid-1920x1920.png');
    game.load.image('atari', 'assets/sprites/atari800xl.png');
    game.load.image('sonic', 'assets/sprites/sonic_havok_sanity.png');

}

var result = 'Drag a sprite';

function create() {

    game.add.sprite(0, 0, 'grid');

    var atari = game.add.sprite(32, 100, 'atari');

    //  Enable input and allow for dragging
    atari.inputEnabled = true;
    atari.input.enableDrag();
    atari.events.onDragStart.add(onDragStart, this);//开始拖动事件绑定
    atari.events.onDragStop.add(onDragStop, this);//停止拖动事件绑定

    var sonic = game.add.sprite(300, 200, 'sonic');

    sonic.inputEnabled = true;
    sonic.input.enableDrag();
    sonic.events.onDragStart.add(onDragStart, this);//开始拖动事件绑定
    sonic.events.onDragStop.add(onDragStop, this);//停止拖动事件绑定

}

function onDragStart(sprite, pointer) {

    result = "Dragging " + sprite.key;//开始拖就显示这个sprite的名字

}

function onDragStop(sprite, pointer) {

    result = sprite.key + " dropped at x:" + pointer.x + " y: " + pointer.y;//停止拖动就显示它的名字和现在的坐标

}

function render() {

    game.debug.text(result, 10, 20);//调试

}
//这里可以在拖动时把要拖动的对像的Z-INDEX设置在最上,放在最上层,但是停止后也是在最上层,没有设置回去原先的Z值
var game = new Phaser.Game(800, 600, Phaser.CANVAS, 'phaser-example', { preload: preload, create: create, render: render });

function preload() {

    game.load.image('atari1', 'assets/sprites/atari130xe.png');
    game.load.image('atari2', 'assets/sprites/atari800xl.png');
    game.load.image('atari4', 'assets/sprites/atari800.png');
    game.load.image('sonic', 'assets/sprites/sonic_havok_sanity.png');
    game.load.image('duck', 'assets/sprites/darkwing_crazy.png');
    game.load.image('firstaid', 'assets/sprites/firstaid.png');
    game.load.image('diamond', 'assets/sprites/diamond.png');
    game.load.image('mushroom', 'assets/sprites/mushroom2.png');

}

function create() {

    //  This returns an array of all the image keys in the cache
    var images = game.cache.getKeys(Phaser.Cache.IMAGE);

    var test = game.add.group();

    //  Now let's create some random sprites and enable them all for drag and 'bring to top'
    for (var i = 0; i < 20; i++)
    {
        var tempSprite = test.create(game.world.randomX, game.world.randomY, game.rnd.pick(images));
        tempSprite.inputEnabled = true;
        tempSprite.input.enableDrag(false, true);
    }

}

function render() {
    game.debug.inputInfo(32, 32);
}
//这个例子里又加入了在拖动过程中持续更新的事件
var game = new Phaser.Game(800, 600, Phaser.CANVAS, 'phaser-example', { preload: preload, create: create });

function preload() {

    game.load.image('ship', 'assets/sprites/ship.png');
    game.load.image('ball', 'assets/sprites/longarrow.png');

}

var angle = 0;
var dragSprite;
var copySprite;

function create() {

    game.stage.backgroundColor = '#2f0f1c';

    dragSprite = game.add.sprite(game.world.centerX, game.world.centerY, 'ship');
    dragSprite.anchor.set(0.5);

    //  Input Enable the sprite
    dragSprite.inputEnabled = true;

    //  Allow dragging
    dragSprite.input.enableDrag();

    //  Drag events
    dragSprite.events.onDragStart.add(dragStart);
    dragSprite.events.onDragUpdate.add(dragUpdate);//就是这个了
    dragSprite.events.onDragStop.add(dragStop);

    copySprite = game.add.sprite(dragSprite.x + 220, dragSprite.y, 'ball');
    copySprite.anchor.set(0, 0.5);
    copySprite.alpha = 0.5;
    copySprite.angle = 180;

    var text = game.add.text(32, 32, "drag the ship", { font: "32px Arial", fill: "#f9b4cf" });
    text.setShadow(6, 6, 'rgba(0,0,0,0.8)', 5);

}

function dragStart() {

    copySprite.alpha = 1;

}

function dragUpdate(sprite, pointer, dragX, dragY, snapPoint) {
     //这里
    //  As we drag the ship around inc the angle
    angle += 0.01;

    //  This just circles the copySprite around the sprite being dragged
    copySprite.x = dragSprite.x + 220 * Math.cos(angle);
    copySprite.y = dragSprite.y + 220 * Math.sin(angle);

    //  And this points the copySprite at the current pointer
    copySprite.rotation = game.physics.arcade.angleToPointer(copySprite);

}

function dragStop() {

    copySprite.alpha = 0.5;

}

效果↑:http://phaser.io/examples/v2/input/drag-update

//这个例子创建了一个鼠标跟随效果,也就是在屏幕上按下鼠标和按下鼠标移动时,对象会向鼠标所在的坐标移动
var game = new Phaser.Game(800, 600, Phaser.AUTO, 'phaser-example', { preload: preload, create: create, update: update });

function preload() {

    game.load.image('ball', 'assets/sprites/shinyball.png');

}

var sprite;

function create() {

    sprite = game.add.sprite(game.world.centerX, game.world.centerY, 'ball');
    game.physics.enable(sprite, Phaser.Physics.ARCADE);

}

function update() {

    //  only move when you click
    if (game.input.mousePointer.isDown)
    {
        //  400 is the speed it will move towards the mouse
        game.physics.arcade.moveToPointer(sprite, 400);

        //  if it's overlapping the mouse, don't move any more
        if (Phaser.Rectangle.contains(sprite.body, game.input.x, game.input.y))
        {
            sprite.body.velocity.setTo(0, 0);
        }
    }
    else
    {
        sprite.body.velocity.setTo(0, 0);
    }

}

效果↗:http://phaser.io/examples/v2/input/follow-mouse

//鼠标移动到目标上面,
var game = new Phaser.Game(800, 600, Phaser.CANVAS, 'phaser-example', { preload: preload, create: create, update: update, render: render });

function preload() {

    game.load.image('bunny', 'assets/sprites/bunny.png');

}

var bunny;

function create() {

    bunny = game.add.sprite(game.world.centerX, game.world.centerY, 'bunny');

    bunny.alpha = 0.5;
    bunny.anchor.set(0.5);

    bunny.inputEnabled = true;

    game.input.addMoveCallback(p, this);

    // bunny.input.pixelPerfectOver = true;

}

function p(pointer) {

    // console.log(pointer.);
    console.log(pointer.event);

}

function update() {

    if (bunny.input.pointerOver())
    {
        bunny.alpha = 1;
    }
    else
    {
        bunny.alpha = 0.5;
    }

}

function render() {

    game.debug.text("Over: " + bunny.input.pointerOver(), 32, 32);
    game.debug.text(game.input.mouse.locked, 320, 32);

}

效果:↑http://phaser.io/examples/v2/input/pointer-over

//这个是拖动时的控制最小移动距离,按多少像素间隔拖动
var game = new Phaser.Game(800, 600, Phaser.AUTO, 'phaser-example', { preload: preload, create: create });

function preload() {

    game.load.image('grid', 'assets/tests/debug-grid-1920x1920.png');
    game.load.image('atari1', 'assets/sprites/atari130xe.png');
    game.load.image('atari2', 'assets/sprites/atari800xl.png');

}

function create() {

    game.add.sprite(0, 0, 'grid');

    atari1 = game.add.sprite(128, 128, 'atari1');
    atari2 = game.add.sprite(256, 256, 'atari2');

    //  Input Enable the sprites
    atari1.inputEnabled = true;
    atari2.inputEnabled = true;

    //  Allow dragging
    //  enableDrag parameters = (lockCenter, bringToTop, pixelPerfect, alphaThreshold, boundsRect, boundsSprite)
    atari1.input.enableDrag();
    atari2.input.enableDrag();

    //  Enable snapping. For the atari1 sprite it will snap as its dragged around and on release.
    //  The snap is set to every 32x32 pixels.
    atari1.input.enableSnap(32, 32, true, true);//不受大小限制     和下面的那个说反了......调过来

    //  For the atari2 sprite it will snap only when released, not on drag.
    atari2.input.enableSnap(32, 32, false, true);//只能按32.32像素的大小进行拖动

}
//终于找到要用的了:这个是鼠标点击,返回被点击对像的名字
var game = new Phaser.Game(800, 600, Phaser.CANVAS, 'phaser-example', { preload: preload, create: create });

function preload() {

    game.load.atlas('atlas', 'assets/pics/texturepacker_test.png', 'assets/pics/texturepacker_test.json');

}

var chick;
var car;
var mech;
var cop;
var text;

function create() {

    game.stage.backgroundColor = '#404040';

    //  This demonstrates pixel perfect click detection even if using sprites in a texture atlas.

    chick = game.add.sprite(64, 64, 'atlas');
    chick.frameName = 'budbrain_chick.png';
    chick.inputEnabled = true;
    chick.input.pixelPerfectClick = true;
    chick.events.onInputDown.add(clicked, this);
    chick.scale.set(2);

    cop = game.add.sprite(650, 32, 'atlas');
    cop.frameName = 'ladycop.png';
    cop.inputEnabled = true;
    cop.input.pixelPerfectClick = true;
    cop.events.onInputDown.add(clicked, this);
    cop.scale.set(1, 2.5);

    car = game.add.sprite(100, 400, 'atlas');
    car.frameName = 'supercars_parsec.png';
    car.inputEnabled = true;
    car.input.pixelPerfectClick = true;
    car.events.onInputDown.add(clicked, this);
    car.scale.set(0.5);

    mech = game.add.sprite(240, 100, 'atlas');
    mech.frameName = 'titan_mech.png';
    mech.inputEnabled = true;
    mech.input.pixelPerfectClick = true;
    mech.events.onInputDown.add(clicked, this);
    mech.scale.set(1.5, 1);

    text = game.add.text(16, 16, 'Click a sprite', { fill: '#ffffff' });

}

function clicked(sprite) {

    text.text = 'You clicked ' + sprite.frameName;

}

效果↗:http://phaser.io/examples/v2/input/pixelpick-atlas-scaled