mirror of
https://github.com/wassname/phaser.git
synced 2026-06-27 16:10:15 +08:00
5d5c64d22f
After defining tiles that collide on a Tilemap, you need to call Tilemap.generateCollisionData(layer) to populate the physics world with the data required. Debug.renderPhysicsBody updated to take camera location and body rotation into account. Body movement functions put back to velocity :) Updated to latest dev version of pixi and latest p2.js Updated docs
1398 lines
36 KiB
HTML
1398 lines
36 KiB
HTML
<!DOCTYPE html>
|
|
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<title>Phaser Source: input/Input.js</title>
|
|
|
|
<!--[if lt IE 9]>
|
|
<script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
|
|
<![endif]-->
|
|
<link type="text/css" rel="stylesheet" href="styles/sunlight.default.css">
|
|
|
|
|
|
<link type="text/css" rel="stylesheet" href="styles/site.cerulean.css">
|
|
|
|
</head>
|
|
|
|
<body>
|
|
<div class="container-fluid">
|
|
<div class="navbar navbar-fixed-top navbar-inverse">
|
|
<div class="navbar-inner">
|
|
<a class="brand" href="index.html">Phaser</a>
|
|
<ul class="nav">
|
|
|
|
<li class="dropdown">
|
|
<a href="namespaces.list.html" class="dropdown-toggle" data-toggle="dropdown">Namespaces<b
|
|
class="caret"></b></a>
|
|
|
|
<ul class="dropdown-menu ">
|
|
|
|
<li>
|
|
<a href="Phaser.html">Phaser</a>
|
|
</li>
|
|
|
|
|
|
</ul>
|
|
</li>
|
|
|
|
<li class="dropdown">
|
|
<a href="classes.list.html" class="dropdown-toggle" data-toggle="dropdown">Classes<b
|
|
class="caret"></b></a>
|
|
|
|
<ul class="dropdown-menu ">
|
|
|
|
<li>
|
|
<a href="Phaser.Animation.html">Animation</a>
|
|
</li>
|
|
|
|
<li>
|
|
<a href="Phaser.AnimationManager.html">AnimationManager</a>
|
|
</li>
|
|
|
|
<li>
|
|
<a href="Phaser.AnimationParser.html">AnimationParser</a>
|
|
</li>
|
|
|
|
<li>
|
|
<a href="Phaser.BitmapData.html">BitmapData</a>
|
|
</li>
|
|
|
|
<li>
|
|
<a href="Phaser.BitmapFont.html">BitmapFont</a>
|
|
</li>
|
|
|
|
<li>
|
|
<a href="Phaser.BitmapText.html">BitmapText</a>
|
|
</li>
|
|
|
|
<li>
|
|
<a href="Phaser.Button.html">Button</a>
|
|
</li>
|
|
|
|
<li>
|
|
<a href="Phaser.Cache.html">Cache</a>
|
|
</li>
|
|
|
|
<li>
|
|
<a href="Phaser.Camera.html">Camera</a>
|
|
</li>
|
|
|
|
<li>
|
|
<a href="Phaser.Canvas.html">Canvas</a>
|
|
</li>
|
|
|
|
<li>
|
|
<a href="Phaser.Circle.html">Circle</a>
|
|
</li>
|
|
|
|
<li>
|
|
<a href="Phaser.Color.html">Color</a>
|
|
</li>
|
|
|
|
<li>
|
|
<a href="Phaser.Device.html">Device</a>
|
|
</li>
|
|
|
|
<li>
|
|
<a href="Phaser.Easing.html">Easing</a>
|
|
</li>
|
|
|
|
<li>
|
|
<a href="Phaser.Easing.Back.html">Back</a>
|
|
</li>
|
|
|
|
<li>
|
|
<a href="Phaser.Easing.Bounce.html">Bounce</a>
|
|
</li>
|
|
|
|
<li>
|
|
<a href="Phaser.Easing.Circular.html">Circular</a>
|
|
</li>
|
|
|
|
<li>
|
|
<a href="Phaser.Easing.Cubic.html">Cubic</a>
|
|
</li>
|
|
|
|
<li>
|
|
<a href="Phaser.Easing.Elastic.html">Elastic</a>
|
|
</li>
|
|
|
|
<li>
|
|
<a href="Phaser.Easing.Exponential.html">Exponential</a>
|
|
</li>
|
|
|
|
<li>
|
|
<a href="Phaser.Easing.Linear.html">Linear</a>
|
|
</li>
|
|
|
|
<li>
|
|
<a href="Phaser.Easing.Quadratic.html">Quadratic</a>
|
|
</li>
|
|
|
|
<li>
|
|
<a href="Phaser.Easing.Quartic.html">Quartic</a>
|
|
</li>
|
|
|
|
<li>
|
|
<a href="Phaser.Easing.Quintic.html">Quintic</a>
|
|
</li>
|
|
|
|
<li>
|
|
<a href="Phaser.Easing.Sinusoidal.html">Sinusoidal</a>
|
|
</li>
|
|
|
|
<li>
|
|
<a href="Phaser.Ellipse.html">Ellipse</a>
|
|
</li>
|
|
|
|
<li>
|
|
<a href="Phaser.Events.html">Events</a>
|
|
</li>
|
|
|
|
<li>
|
|
<a href="Phaser.Filter.html">Filter</a>
|
|
</li>
|
|
|
|
<li>
|
|
<a href="Phaser.Frame.html">Frame</a>
|
|
</li>
|
|
|
|
<li>
|
|
<a href="Phaser.FrameData.html">FrameData</a>
|
|
</li>
|
|
|
|
<li>
|
|
<a href="Phaser.Game.html">Game</a>
|
|
</li>
|
|
|
|
<li>
|
|
<a href="Phaser.GameObjectFactory.html">GameObjectFactory</a>
|
|
</li>
|
|
|
|
<li>
|
|
<a href="Phaser.Gamepad.html">Gamepad</a>
|
|
</li>
|
|
|
|
<li>
|
|
<a href="Phaser.GamepadButton.html">GamepadButton</a>
|
|
</li>
|
|
|
|
<li>
|
|
<a href="Phaser.Graphics.html">Graphics</a>
|
|
</li>
|
|
|
|
<li>
|
|
<a href="Phaser.Group.html">Group</a>
|
|
</li>
|
|
|
|
<li>
|
|
<a href="Phaser.Image.html">Image</a>
|
|
</li>
|
|
|
|
<li>
|
|
<a href="Phaser.Input.html">Input</a>
|
|
</li>
|
|
|
|
<li>
|
|
<a href="Phaser.InputHandler.html">InputHandler</a>
|
|
</li>
|
|
|
|
<li>
|
|
<a href="Phaser.Key.html">Key</a>
|
|
</li>
|
|
|
|
<li>
|
|
<a href="Phaser.Keyboard.html">Keyboard</a>
|
|
</li>
|
|
|
|
<li>
|
|
<a href="Phaser.Line.html">Line</a>
|
|
</li>
|
|
|
|
<li>
|
|
<a href="Phaser.LinkedList.html">LinkedList</a>
|
|
</li>
|
|
|
|
<li>
|
|
<a href="Phaser.Loader.html">Loader</a>
|
|
</li>
|
|
|
|
<li>
|
|
<a href="Phaser.LoaderParser.html">LoaderParser</a>
|
|
</li>
|
|
|
|
<li>
|
|
<a href="Phaser.Math.html">Math</a>
|
|
</li>
|
|
|
|
<li>
|
|
<a href="Phaser.Mouse.html">Mouse</a>
|
|
</li>
|
|
|
|
<li>
|
|
<a href="Phaser.MSPointer.html">MSPointer</a>
|
|
</li>
|
|
|
|
<li>
|
|
<a href="Phaser.Net.html">Net</a>
|
|
</li>
|
|
|
|
<li>
|
|
<a href="Phaser.Particles.html">Particles</a>
|
|
</li>
|
|
|
|
<li>
|
|
<a href="Phaser.Particles.Arcade.Emitter.html">Emitter</a>
|
|
</li>
|
|
|
|
<li>
|
|
<a href="Phaser.Physics.html">Physics</a>
|
|
</li>
|
|
|
|
<li>
|
|
<a href="Phaser.Physics.Arcade.html">Arcade</a>
|
|
</li>
|
|
|
|
<li>
|
|
<a href="Phaser.Plugin.html">Plugin</a>
|
|
</li>
|
|
|
|
<li>
|
|
<a href="Phaser.PluginManager.html">PluginManager</a>
|
|
</li>
|
|
|
|
<li>
|
|
<a href="Phaser.Point.html">Point</a>
|
|
</li>
|
|
|
|
<li>
|
|
<a href="Phaser.Pointer.html">Pointer</a>
|
|
</li>
|
|
|
|
<li>
|
|
<a href="Phaser.Polygon.html">Polygon</a>
|
|
</li>
|
|
|
|
<li>
|
|
<a href="Phaser.QuadTree.html">QuadTree</a>
|
|
</li>
|
|
|
|
<li>
|
|
<a href="Phaser.RandomDataGenerator.html">RandomDataGenerator</a>
|
|
</li>
|
|
|
|
<li>
|
|
<a href="Phaser.Rectangle.html">Rectangle</a>
|
|
</li>
|
|
|
|
<li>
|
|
<a href="Phaser.RenderTexture.html">RenderTexture</a>
|
|
</li>
|
|
|
|
<li>
|
|
<a href="Phaser.RequestAnimationFrame.html">RequestAnimationFrame</a>
|
|
</li>
|
|
|
|
<li>
|
|
<a href="Phaser.Signal.html">Signal</a>
|
|
</li>
|
|
|
|
<li>
|
|
<a href="Phaser.SinglePad.html">SinglePad</a>
|
|
</li>
|
|
|
|
<li>
|
|
<a href="Phaser.Sound.html">Sound</a>
|
|
</li>
|
|
|
|
<li>
|
|
<a href="Phaser.SoundManager.html">SoundManager</a>
|
|
</li>
|
|
|
|
<li>
|
|
<a href="Phaser.Sprite.html">Sprite</a>
|
|
</li>
|
|
|
|
<li>
|
|
<a href="Phaser.SpriteBatch.html">SpriteBatch</a>
|
|
</li>
|
|
|
|
<li>
|
|
<a href="Phaser.Stage.html">Stage</a>
|
|
</li>
|
|
|
|
<li>
|
|
<a href="Phaser.StageScaleMode.html">StageScaleMode</a>
|
|
</li>
|
|
|
|
<li>
|
|
<a href="Phaser.State.html">State</a>
|
|
</li>
|
|
|
|
<li>
|
|
<a href="Phaser.StateManager.html">StateManager</a>
|
|
</li>
|
|
|
|
<li>
|
|
<a href="Phaser.Text.html">Text</a>
|
|
</li>
|
|
|
|
<li>
|
|
<a href="Phaser.Tile.html">Tile</a>
|
|
</li>
|
|
|
|
<li>
|
|
<a href="Phaser.Tilemap.html">Tilemap</a>
|
|
</li>
|
|
|
|
<li>
|
|
<a href="Phaser.TilemapLayer.html">TilemapLayer</a>
|
|
</li>
|
|
|
|
<li>
|
|
<a href="Phaser.TilemapParser.html">TilemapParser</a>
|
|
</li>
|
|
|
|
<li>
|
|
<a href="Phaser.Tileset.html">Tileset</a>
|
|
</li>
|
|
|
|
<li>
|
|
<a href="Phaser.TileSprite.html">TileSprite</a>
|
|
</li>
|
|
|
|
<li>
|
|
<a href="Phaser.Time.html">Time</a>
|
|
</li>
|
|
|
|
<li>
|
|
<a href="Phaser.Timer.html">Timer</a>
|
|
</li>
|
|
|
|
<li>
|
|
<a href="Phaser.TimerEvent.html">TimerEvent</a>
|
|
</li>
|
|
|
|
<li>
|
|
<a href="Phaser.Touch.html">Touch</a>
|
|
</li>
|
|
|
|
<li>
|
|
<a href="Phaser.Tween.html">Tween</a>
|
|
</li>
|
|
|
|
<li>
|
|
<a href="Phaser.TweenManager.html">TweenManager</a>
|
|
</li>
|
|
|
|
<li>
|
|
<a href="Phaser.Utils.html">Utils</a>
|
|
</li>
|
|
|
|
<li>
|
|
<a href="Phaser.Utils.Debug.html">Debug</a>
|
|
</li>
|
|
|
|
<li>
|
|
<a href="Phaser.World.html">World</a>
|
|
</li>
|
|
|
|
<li>
|
|
<a href="SignalBinding.html">SignalBinding</a>
|
|
</li>
|
|
|
|
|
|
</ul>
|
|
</li>
|
|
|
|
<li class="dropdown">
|
|
<a href="global.html" class="dropdown-toggle" data-toggle="dropdown">Global<b
|
|
class="caret"></b></a>
|
|
|
|
<ul class="dropdown-menu ">
|
|
|
|
<li>
|
|
<a href="global.html#canUseNewCanvasBlendModes">canUseNewCanvasBlendModes</a>
|
|
</li>
|
|
|
|
<li>
|
|
<a href="global.html#getBounds">getBounds</a>
|
|
</li>
|
|
|
|
<li>
|
|
<a href="global.html#getNextPowerOfTwo">getNextPowerOfTwo</a>
|
|
</li>
|
|
|
|
<li>
|
|
<a href="global.html#hex2rgb">hex2rgb</a>
|
|
</li>
|
|
|
|
<li>
|
|
<a href="global.html#hitTest">hitTest</a>
|
|
</li>
|
|
|
|
<li>
|
|
<a href="global.html#rgb2hex">rgb2hex</a>
|
|
</li>
|
|
|
|
|
|
</ul>
|
|
</li>
|
|
|
|
</ul>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="row-fluid">
|
|
|
|
|
|
<div class="span12">
|
|
|
|
<div id="main">
|
|
|
|
|
|
|
|
<h1 class="page-title">Source: input/Input.js</h1>
|
|
|
|
<section>
|
|
<article>
|
|
<pre class="sunlight-highlight-javascript linenums">/**
|
|
* @author Richard Davey <rich@photonstorm.com>
|
|
* @copyright 2014 Photon Storm Ltd.
|
|
* @license {@link https://github.com/photonstorm/phaser/blob/master/license.txt|MIT License}
|
|
*/
|
|
|
|
/**
|
|
* Phaser.Input is the Input Manager for all types of Input across Phaser, including mouse, keyboard, touch and MSPointer.
|
|
* The Input manager is updated automatically by the core game loop.
|
|
*
|
|
* @class Phaser.Input
|
|
* @constructor
|
|
* @param {Phaser.Game} game - Current game instance.
|
|
*/
|
|
Phaser.Input = function (game) {
|
|
|
|
/**
|
|
* @property {Phaser.Game} game - A reference to the currently running game.
|
|
*/
|
|
this.game = game;
|
|
|
|
/**
|
|
* @property {HTMLCanvasElement} hitCanvas - The canvas to which single pixels are drawn in order to perform pixel-perfect hit detection.
|
|
* @default
|
|
*/
|
|
this.hitCanvas = null;
|
|
|
|
/**
|
|
* @property {CanvasRenderingContext2D} hitContext - The context of the pixel perfect hit canvas.
|
|
* @default
|
|
*/
|
|
this.hitContext = null;
|
|
|
|
/**
|
|
* @property {function} moveCallback - An optional callback that will be fired every time the activePointer receives a move event from the DOM. Set to null to disable.
|
|
*/
|
|
this.moveCallback = null;
|
|
|
|
/**
|
|
* @property {object} moveCallbackContext - The context in which the moveCallback will be sent. Defaults to Phaser.Input but can be set to any valid JS object.
|
|
*/
|
|
this.moveCallbackContext = this;
|
|
|
|
/**
|
|
* @property {number} pollRate - How often should the input pointers be checked for updates? A value of 0 means every single frame (60fps); a value of 1 means every other frame (30fps) and so on.
|
|
* @default
|
|
*/
|
|
this.pollRate = 0;
|
|
|
|
/**
|
|
* @property {number} _pollCounter - Internal var holding the current poll counter.
|
|
* @private
|
|
*/
|
|
this._pollCounter = 0;
|
|
|
|
/**
|
|
* @property {Phaser.Point} _oldPosition - A point object representing the previous position of the Pointer.
|
|
* @private
|
|
*/
|
|
this._oldPosition = null;
|
|
|
|
/**
|
|
* @property {number} _x - x coordinate of the most recent Pointer event
|
|
* @private
|
|
*/
|
|
this._x = 0;
|
|
|
|
/**
|
|
* @property {number} _y - Y coordinate of the most recent Pointer event
|
|
* @private
|
|
*/
|
|
this._y = 0;
|
|
|
|
/**
|
|
* You can disable all Input by setting Input.disabled = true. While set all new input related events will be ignored.
|
|
* If you need to disable just one type of input; for example mouse; use Input.mouse.disabled = true instead
|
|
* @property {boolean} disabled
|
|
* @default
|
|
*/
|
|
this.disabled = false;
|
|
|
|
/**
|
|
* @property {number} multiInputOverride - Controls the expected behaviour when using a mouse and touch together on a multi-input device.
|
|
* @default
|
|
*/
|
|
this.multiInputOverride = Phaser.Input.MOUSE_TOUCH_COMBINE;
|
|
|
|
/**
|
|
* @property {Phaser.Point} position - A point object representing the current position of the Pointer.
|
|
* @default
|
|
*/
|
|
this.position = null;
|
|
|
|
/**
|
|
* @property {Phaser.Point} speed - A point object representing the speed of the Pointer. Only really useful in single Pointer games; otherwise see the Pointer objects directly.
|
|
*/
|
|
this.speed = null;
|
|
|
|
/**
|
|
* A Circle object centered on the x/y screen coordinates of the Input.
|
|
* Default size of 44px (Apples recommended "finger tip" size) but can be changed to anything.
|
|
* @property {Phaser.Circle} circle
|
|
*/
|
|
this.circle = null;
|
|
|
|
/**
|
|
* @property {Phaser.Point} scale - The scale by which all input coordinates are multiplied; calculated by the StageScaleMode. In an un-scaled game the values will be x = 1 and y = 1.
|
|
*/
|
|
this.scale = null;
|
|
|
|
/**
|
|
* @property {number} maxPointers - The maximum number of Pointers allowed to be active at any one time. For lots of games it's useful to set this to 1.
|
|
* @default
|
|
*/
|
|
this.maxPointers = 10;
|
|
|
|
/**
|
|
* @property {number} currentPointers - The current number of active Pointers.
|
|
* @default
|
|
*/
|
|
this.currentPointers = 0;
|
|
|
|
/**
|
|
* @property {number} tapRate - The number of milliseconds that the Pointer has to be pressed down and then released to be considered a tap or click.
|
|
* @default
|
|
*/
|
|
this.tapRate = 200;
|
|
|
|
/**
|
|
* @property {number} doubleTapRate - The number of milliseconds between taps of the same Pointer for it to be considered a double tap / click.
|
|
* @default
|
|
*/
|
|
this.doubleTapRate = 300;
|
|
|
|
/**
|
|
* @property {number} holdRate - The number of milliseconds that the Pointer has to be pressed down for it to fire a onHold event.
|
|
* @default
|
|
*/
|
|
this.holdRate = 2000;
|
|
|
|
/**
|
|
* @property {number} justPressedRate - The number of milliseconds below which the Pointer is considered justPressed.
|
|
* @default
|
|
*/
|
|
this.justPressedRate = 200;
|
|
|
|
/**
|
|
* @property {number} justReleasedRate - The number of milliseconds below which the Pointer is considered justReleased .
|
|
* @default
|
|
*/
|
|
this.justReleasedRate = 200;
|
|
|
|
/**
|
|
* Sets if the Pointer objects should record a history of x/y coordinates they have passed through.
|
|
* The history is cleared each time the Pointer is pressed down.
|
|
* The history is updated at the rate specified in Input.pollRate
|
|
* @property {boolean} recordPointerHistory
|
|
* @default
|
|
*/
|
|
this.recordPointerHistory = false;
|
|
|
|
/**
|
|
* @property {number} recordRate - The rate in milliseconds at which the Pointer objects should update their tracking history.
|
|
* @default
|
|
*/
|
|
this.recordRate = 100;
|
|
|
|
/**
|
|
* The total number of entries that can be recorded into the Pointer objects tracking history.
|
|
* If the Pointer is tracking one event every 100ms; then a trackLimit of 100 would store the last 10 seconds worth of history.
|
|
* @property {number} recordLimit
|
|
* @default
|
|
*/
|
|
this.recordLimit = 100;
|
|
|
|
/**
|
|
* @property {Phaser.Pointer} pointer1 - A Pointer object.
|
|
*/
|
|
this.pointer1 = null;
|
|
|
|
/**
|
|
* @property {Phaser.Pointer} pointer2 - A Pointer object.
|
|
*/
|
|
this.pointer2 = null;
|
|
|
|
/**
|
|
* @property {Phaser.Pointer} pointer3 - A Pointer object.
|
|
*/
|
|
this.pointer3 = null;
|
|
|
|
/**
|
|
* @property {Phaser.Pointer} pointer4 - A Pointer object.
|
|
*/
|
|
this.pointer4 = null;
|
|
|
|
/**
|
|
* @property {Phaser.Pointer} pointer5 - A Pointer object.
|
|
*/
|
|
this.pointer5 = null;
|
|
|
|
/**
|
|
* @property {Phaser.Pointer} pointer6 - A Pointer object.
|
|
*/
|
|
this.pointer6 = null;
|
|
|
|
/**
|
|
* @property {Phaser.Pointer} pointer7 - A Pointer object.
|
|
*/
|
|
this.pointer7 = null;
|
|
|
|
/**
|
|
* @property {Phaser.Pointer} pointer8 - A Pointer object.
|
|
*/
|
|
this.pointer8 = null;
|
|
|
|
/**
|
|
* @property {Phaser.Pointer} pointer9 - A Pointer object.
|
|
*/
|
|
this.pointer9 = null;
|
|
|
|
/**
|
|
* @property {Phaser.Pointer} pointer10 - A Pointer object.
|
|
*/
|
|
this.pointer10 = null;
|
|
|
|
/**
|
|
* The most recently active Pointer object.
|
|
* When you've limited max pointers to 1 this will accurately be either the first finger touched or mouse.
|
|
* @property {Phaser.Pointer} activePointer
|
|
*/
|
|
this.activePointer = null;
|
|
|
|
/**
|
|
* @property {Pointer} mousePointer - The mouse has its own unique Phaser.Pointer object which you can use if making a desktop specific game.
|
|
*/
|
|
this.mousePointer = null;
|
|
|
|
/**
|
|
* @property {Phaser.Mouse} mouse - The Mouse Input manager.
|
|
*/
|
|
this.mouse = null;
|
|
|
|
/**
|
|
* @property {Phaser.Keyboard} keyboard - The Keyboard Input manager.
|
|
*/
|
|
this.keyboard = null;
|
|
|
|
/**
|
|
* @property {Phaser.Touch} touch - the Touch Input manager.
|
|
*/
|
|
this.touch = null;
|
|
|
|
/**
|
|
* @property {Phaser.MSPointer} mspointer - The MSPointer Input manager.
|
|
*/
|
|
this.mspointer = null;
|
|
|
|
/**
|
|
* @property {Phaser.Gamepad} gamepad - The Gamepad Input manager.
|
|
*/
|
|
this.gamepad = null;
|
|
|
|
/**
|
|
* @property {Phaser.Signal} onDown - A Signal that is dispatched each time a pointer is pressed down.
|
|
*/
|
|
this.onDown = null;
|
|
|
|
/**
|
|
* @property {Phaser.Signal} onUp - A Signal that is dispatched each time a pointer is released.
|
|
*/
|
|
this.onUp = null;
|
|
|
|
/**
|
|
* @property {Phaser.Signal} onTap - A Signal that is dispatched each time a pointer is tapped.
|
|
*/
|
|
this.onTap = null;
|
|
|
|
/**
|
|
* @property {Phaser.Signal} onHold - A Signal that is dispatched each time a pointer is held down.
|
|
*/
|
|
this.onHold = null;
|
|
|
|
/**
|
|
* A linked list of interactive objects; the InputHandler components (belonging to Sprites) register themselves with this.
|
|
* @property {Phaser.LinkedList} interactiveItems
|
|
*/
|
|
this.interactiveItems = new Phaser.LinkedList();
|
|
|
|
/**
|
|
* @property {Phaser.Point} _localPoint - Internal cache var.
|
|
* @private
|
|
*/
|
|
this._localPoint = new Phaser.Point();
|
|
|
|
};
|
|
|
|
/**
|
|
* @constant
|
|
* @type {number}
|
|
*/
|
|
Phaser.Input.MOUSE_OVERRIDES_TOUCH = 0;
|
|
|
|
/**
|
|
* @constant
|
|
* @type {number}
|
|
*/
|
|
Phaser.Input.TOUCH_OVERRIDES_MOUSE = 1;
|
|
|
|
/**
|
|
* @constant
|
|
* @type {number}
|
|
*/
|
|
Phaser.Input.MOUSE_TOUCH_COMBINE = 2;
|
|
|
|
Phaser.Input.prototype = {
|
|
|
|
/**
|
|
* Starts the Input Manager running.
|
|
* @method Phaser.Input#boot
|
|
* @protected
|
|
*/
|
|
boot: function () {
|
|
|
|
this.mousePointer = new Phaser.Pointer(this.game, 0);
|
|
this.pointer1 = new Phaser.Pointer(this.game, 1);
|
|
this.pointer2 = new Phaser.Pointer(this.game, 2);
|
|
|
|
this.mouse = new Phaser.Mouse(this.game);
|
|
this.keyboard = new Phaser.Keyboard(this.game);
|
|
this.touch = new Phaser.Touch(this.game);
|
|
this.mspointer = new Phaser.MSPointer(this.game);
|
|
this.gamepad = new Phaser.Gamepad(this.game);
|
|
|
|
this.onDown = new Phaser.Signal();
|
|
this.onUp = new Phaser.Signal();
|
|
this.onTap = new Phaser.Signal();
|
|
this.onHold = new Phaser.Signal();
|
|
|
|
this.scale = new Phaser.Point(1, 1);
|
|
this.speed = new Phaser.Point();
|
|
this.position = new Phaser.Point();
|
|
this._oldPosition = new Phaser.Point();
|
|
|
|
this.circle = new Phaser.Circle(0, 0, 44);
|
|
|
|
this.activePointer = this.mousePointer;
|
|
this.currentPointers = 0;
|
|
|
|
this.hitCanvas = document.createElement('canvas');
|
|
this.hitCanvas.width = 1;
|
|
this.hitCanvas.height = 1;
|
|
this.hitContext = this.hitCanvas.getContext('2d');
|
|
|
|
this.mouse.start();
|
|
this.keyboard.start();
|
|
this.touch.start();
|
|
this.mspointer.start();
|
|
this.mousePointer.active = true;
|
|
|
|
},
|
|
|
|
/**
|
|
* Stops all of the Input Managers from running.
|
|
* @method Phaser.Input#destroy
|
|
*/
|
|
destroy: function () {
|
|
|
|
this.mouse.stop();
|
|
this.keyboard.stop();
|
|
this.touch.stop();
|
|
this.mspointer.stop();
|
|
this.gamepad.stop();
|
|
|
|
this.moveCallback = null;
|
|
|
|
},
|
|
|
|
/**
|
|
* Sets a callback that is fired every time the activePointer receives a DOM move event such as a mousemove or touchmove.
|
|
* It will be called every time the activePointer moves, which in a multi-touch game can be a lot of times, so this is best
|
|
* to only use if you've limited input to a single pointer (i.e. mouse or touch)
|
|
* @method Phaser.Input#setMoveCallback
|
|
* @param {function} callback - The callback that will be called each time the activePointer receives a DOM move event.
|
|
* @param {object} callbackContext - The context in which the callback will be called.
|
|
*/
|
|
setMoveCallback: function (callback, callbackContext) {
|
|
|
|
this.moveCallback = callback;
|
|
this.moveCallbackContext = callbackContext;
|
|
|
|
},
|
|
|
|
/**
|
|
* Add a new Pointer object to the Input Manager. By default Input creates 3 pointer objects: mousePointer, pointer1 and pointer2.
|
|
* If you need more then use this to create a new one, up to a maximum of 10.
|
|
* @method Phaser.Input#addPointer
|
|
* @return {Phaser.Pointer} A reference to the new Pointer object that was created.
|
|
*/
|
|
addPointer: function () {
|
|
|
|
var next = 0;
|
|
|
|
for (var i = 10; i > 0; i--)
|
|
{
|
|
if (this['pointer' + i] === null)
|
|
{
|
|
next = i;
|
|
}
|
|
}
|
|
|
|
if (next === 0)
|
|
{
|
|
console.warn("You can only have 10 Pointer objects");
|
|
return null;
|
|
}
|
|
else
|
|
{
|
|
this['pointer' + next] = new Phaser.Pointer(this.game, next);
|
|
return this['pointer' + next];
|
|
}
|
|
|
|
},
|
|
|
|
/**
|
|
* Updates the Input Manager. Called by the core Game loop.
|
|
* @method Phaser.Input#update
|
|
* @protected
|
|
*/
|
|
update: function () {
|
|
|
|
if (this.pollRate > 0 && this._pollCounter < this.pollRate)
|
|
{
|
|
this._pollCounter++;
|
|
return;
|
|
}
|
|
|
|
this.speed.x = this.position.x - this._oldPosition.x;
|
|
this.speed.y = this.position.y - this._oldPosition.y;
|
|
|
|
this._oldPosition.copyFrom(this.position);
|
|
this.mousePointer.update();
|
|
|
|
if (this.gamepad.active) { this.gamepad.update(); }
|
|
|
|
this.pointer1.update();
|
|
this.pointer2.update();
|
|
|
|
if (this.pointer3) { this.pointer3.update(); }
|
|
if (this.pointer4) { this.pointer4.update(); }
|
|
if (this.pointer5) { this.pointer5.update(); }
|
|
if (this.pointer6) { this.pointer6.update(); }
|
|
if (this.pointer7) { this.pointer7.update(); }
|
|
if (this.pointer8) { this.pointer8.update(); }
|
|
if (this.pointer9) { this.pointer9.update(); }
|
|
if (this.pointer10) { this.pointer10.update(); }
|
|
|
|
this._pollCounter = 0;
|
|
},
|
|
|
|
/**
|
|
* Reset all of the Pointers and Input states
|
|
* @method Phaser.Input#reset
|
|
* @param {boolean} hard - A soft reset (hard = false) won't reset any Signals that might be bound. A hard reset will.
|
|
*/
|
|
reset: function (hard) {
|
|
|
|
if (this.game.isBooted === false)
|
|
{
|
|
return;
|
|
}
|
|
|
|
if (typeof hard == 'undefined') { hard = false; }
|
|
|
|
this.keyboard.reset();
|
|
this.mousePointer.reset();
|
|
this.gamepad.reset();
|
|
|
|
for (var i = 1; i <= 10; i++)
|
|
{
|
|
if (this['pointer' + i])
|
|
{
|
|
this['pointer' + i].reset();
|
|
}
|
|
}
|
|
|
|
this.currentPointers = 0;
|
|
|
|
if (this.game.canvas.style.cursor !== 'none')
|
|
{
|
|
this.game.canvas.style.cursor = 'inherit';
|
|
}
|
|
|
|
if (hard === true)
|
|
{
|
|
this.onDown.dispose();
|
|
this.onUp.dispose();
|
|
this.onTap.dispose();
|
|
this.onHold.dispose();
|
|
this.onDown = new Phaser.Signal();
|
|
this.onUp = new Phaser.Signal();
|
|
this.onTap = new Phaser.Signal();
|
|
this.onHold = new Phaser.Signal();
|
|
|
|
this.interactiveItems.callAll('reset');
|
|
}
|
|
|
|
this._pollCounter = 0;
|
|
|
|
},
|
|
|
|
/**
|
|
* Resets the speed and old position properties.
|
|
* @method Phaser.Input#resetSpeed
|
|
* @param {number} x - Sets the oldPosition.x value.
|
|
* @param {number} y - Sets the oldPosition.y value.
|
|
*/
|
|
resetSpeed: function (x, y) {
|
|
|
|
this._oldPosition.setTo(x, y);
|
|
this.speed.setTo(0, 0);
|
|
|
|
},
|
|
|
|
/**
|
|
* Find the first free Pointer object and start it, passing in the event data. This is called automatically by Phaser.Touch and Phaser.MSPointer.
|
|
* @method Phaser.Input#startPointer
|
|
* @param {Any} event - The event data from the Touch event.
|
|
* @return {Phaser.Pointer} The Pointer object that was started or null if no Pointer object is available.
|
|
*/
|
|
startPointer: function (event) {
|
|
|
|
if (this.maxPointers < 10 && this.totalActivePointers == this.maxPointers)
|
|
{
|
|
return null;
|
|
}
|
|
|
|
if (this.pointer1.active === false)
|
|
{
|
|
return this.pointer1.start(event);
|
|
}
|
|
else if (this.pointer2.active === false)
|
|
{
|
|
return this.pointer2.start(event);
|
|
}
|
|
else
|
|
{
|
|
for (var i = 3; i <= 10; i++)
|
|
{
|
|
if (this['pointer' + i] && this['pointer' + i].active === false)
|
|
{
|
|
return this['pointer' + i].start(event);
|
|
}
|
|
}
|
|
}
|
|
|
|
return null;
|
|
|
|
},
|
|
|
|
/**
|
|
* Updates the matching Pointer object, passing in the event data. This is called automatically and should not normally need to be invoked.
|
|
* @method Phaser.Input#updatePointer
|
|
* @param {Any} event - The event data from the Touch event.
|
|
* @return {Phaser.Pointer} The Pointer object that was updated or null if no Pointer object is available.
|
|
*/
|
|
updatePointer: function (event) {
|
|
|
|
if (this.pointer1.active && this.pointer1.identifier == event.identifier)
|
|
{
|
|
return this.pointer1.move(event);
|
|
}
|
|
else if (this.pointer2.active && this.pointer2.identifier == event.identifier)
|
|
{
|
|
return this.pointer2.move(event);
|
|
}
|
|
else
|
|
{
|
|
for (var i = 3; i <= 10; i++)
|
|
{
|
|
if (this['pointer' + i] && this['pointer' + i].active && this['pointer' + i].identifier == event.identifier)
|
|
{
|
|
return this['pointer' + i].move(event);
|
|
}
|
|
}
|
|
}
|
|
|
|
return null;
|
|
|
|
},
|
|
|
|
/**
|
|
* Stops the matching Pointer object, passing in the event data.
|
|
* @method Phaser.Input#stopPointer
|
|
* @param {Any} event - The event data from the Touch event.
|
|
* @return {Phaser.Pointer} The Pointer object that was stopped or null if no Pointer object is available.
|
|
*/
|
|
stopPointer: function (event) {
|
|
|
|
if (this.pointer1.active && this.pointer1.identifier == event.identifier)
|
|
{
|
|
return this.pointer1.stop(event);
|
|
}
|
|
else if (this.pointer2.active && this.pointer2.identifier == event.identifier)
|
|
{
|
|
return this.pointer2.stop(event);
|
|
}
|
|
else
|
|
{
|
|
for (var i = 3; i <= 10; i++)
|
|
{
|
|
if (this['pointer' + i] && this['pointer' + i].active && this['pointer' + i].identifier == event.identifier)
|
|
{
|
|
return this['pointer' + i].stop(event);
|
|
}
|
|
}
|
|
}
|
|
|
|
return null;
|
|
|
|
},
|
|
|
|
/**
|
|
* Get the next Pointer object whos active property matches the given state
|
|
* @method Phaser.Input#getPointer
|
|
* @param {boolean} state - The state the Pointer should be in (false for inactive, true for active).
|
|
* @return {Phaser.Pointer} A Pointer object or null if no Pointer object matches the requested state.
|
|
*/
|
|
getPointer: function (state) {
|
|
|
|
state = state || false;
|
|
|
|
if (this.pointer1.active == state)
|
|
{
|
|
return this.pointer1;
|
|
}
|
|
else if (this.pointer2.active == state)
|
|
{
|
|
return this.pointer2;
|
|
}
|
|
else
|
|
{
|
|
for (var i = 3; i <= 10; i++)
|
|
{
|
|
if (this['pointer' + i] && this['pointer' + i].active == state)
|
|
{
|
|
return this['pointer' + i];
|
|
}
|
|
}
|
|
}
|
|
|
|
return null;
|
|
|
|
},
|
|
|
|
/**
|
|
* Get the Pointer object whos identified property matches the given identifier value.
|
|
* @method Phaser.Input#getPointerFromIdentifier
|
|
* @param {number} identifier - The Pointer.identifier value to search for.
|
|
* @return {Phaser.Pointer} A Pointer object or null if no Pointer object matches the requested identifier.
|
|
*/
|
|
getPointerFromIdentifier: function (identifier) {
|
|
|
|
if (this.pointer1.identifier == identifier)
|
|
{
|
|
return this.pointer1;
|
|
}
|
|
else if (this.pointer2.identifier == identifier)
|
|
{
|
|
return this.pointer2;
|
|
}
|
|
else
|
|
{
|
|
for (var i = 3; i <= 10; i++)
|
|
{
|
|
if (this['pointer' + i] && this['pointer' + i].identifier == identifier)
|
|
{
|
|
return this['pointer' + i];
|
|
}
|
|
}
|
|
}
|
|
|
|
return null;
|
|
|
|
},
|
|
|
|
/**
|
|
* This will return the local coordinates of the specified displayObject based on the given Pointer.
|
|
* @method Phaser.Input#getLocalPosition
|
|
* @param {Phaser.Sprite|Phaser.Image} displayObject - The DisplayObject to get the local coordinates for.
|
|
* @param {Phaser.Pointer} pointer - The Pointer to use in the check against the displayObject.
|
|
* @return {Phaser.Point} A point containing the coordinates of the Pointer position relative to the DisplayObject.
|
|
*/
|
|
getLocalPosition: function (displayObject, pointer, output) {
|
|
|
|
if (typeof output === 'undefined') { output = new Phaser.Point(); }
|
|
|
|
var wt = displayObject.worldTransform;
|
|
var id = 1 / (wt.a * wt.d + wt.b * -wt.c);
|
|
|
|
return output.setTo(
|
|
wt.d * id * pointer.x + -wt.b * id * pointer.y + (wt.ty * wt.b - wt.tx * wt.d) * id,
|
|
wt.a * id * pointer.y + -wt.c * id * pointer.x + (-wt.ty * wt.a + wt.tx * wt.c) * id
|
|
);
|
|
|
|
},
|
|
|
|
/**
|
|
* Tests if the current mouse coordinates hit a sprite
|
|
*
|
|
* @method hitTest
|
|
* @param displayObject {DisplayObject} The displayObject to test for a hit
|
|
*/
|
|
hitTest: function (displayObject, pointer, localPoint) {
|
|
|
|
if (!displayObject.worldVisible)
|
|
{
|
|
return false;
|
|
}
|
|
|
|
this.getLocalPosition(displayObject, pointer, this._localPoint);
|
|
|
|
localPoint.copyFrom(this._localPoint);
|
|
|
|
if (displayObject.hitArea && displayObject.hitArea.contains)
|
|
{
|
|
if (displayObject.hitArea.contains(this._localPoint.x, this._localPoint.y))
|
|
{
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
else if (displayObject instanceof PIXI.Sprite)
|
|
{
|
|
var width = displayObject.texture.frame.width;
|
|
var height = displayObject.texture.frame.height;
|
|
var x1 = -width * displayObject.anchor.x;
|
|
|
|
if (this._localPoint.x > x1 && this._localPoint.x < x1 + width)
|
|
{
|
|
var y1 = -height * displayObject.anchor.y;
|
|
|
|
if (this._localPoint.y > y1 && this._localPoint.y < y1 + height)
|
|
{
|
|
return true;
|
|
}
|
|
}
|
|
}
|
|
|
|
for (var i = 0, len = displayObject.children.length; i < len; i++)
|
|
{
|
|
if (this.hitTest(displayObject.children[i], pointer, localPoint))
|
|
{
|
|
return true;
|
|
}
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
};
|
|
|
|
Phaser.Input.prototype.constructor = Phaser.Input;
|
|
|
|
/**
|
|
* The X coordinate of the most recently active pointer. This value takes game scaling into account automatically. See Pointer.screenX/clientX for source values.
|
|
* @name Phaser.Input#x
|
|
* @property {number} x - The X coordinate of the most recently active pointer.
|
|
*/
|
|
Object.defineProperty(Phaser.Input.prototype, "x", {
|
|
|
|
get: function () {
|
|
return this._x;
|
|
},
|
|
|
|
set: function (value) {
|
|
this._x = Math.floor(value);
|
|
}
|
|
|
|
});
|
|
|
|
/**
|
|
* The Y coordinate of the most recently active pointer. This value takes game scaling into account automatically. See Pointer.screenY/clientY for source values.
|
|
* @name Phaser.Input#y
|
|
* @property {number} y - The Y coordinate of the most recently active pointer.
|
|
*/
|
|
Object.defineProperty(Phaser.Input.prototype, "y", {
|
|
|
|
get: function () {
|
|
return this._y;
|
|
},
|
|
|
|
set: function (value) {
|
|
this._y = Math.floor(value);
|
|
}
|
|
|
|
});
|
|
|
|
/**
|
|
* @name Phaser.Input#pollLocked
|
|
* @property {boolean} pollLocked - True if the Input is currently poll rate locked.
|
|
* @readonly
|
|
*/
|
|
Object.defineProperty(Phaser.Input.prototype, "pollLocked", {
|
|
|
|
get: function () {
|
|
return (this.pollRate > 0 && this._pollCounter < this.pollRate);
|
|
}
|
|
|
|
});
|
|
|
|
/**
|
|
* The total number of inactive Pointers
|
|
* @name Phaser.Input#totalInactivePointers
|
|
* @property {number} totalInactivePointers - The total number of inactive Pointers.
|
|
* @readonly
|
|
*/
|
|
Object.defineProperty(Phaser.Input.prototype, "totalInactivePointers", {
|
|
|
|
get: function () {
|
|
return 10 - this.currentPointers;
|
|
}
|
|
|
|
});
|
|
|
|
/**
|
|
* The total number of active Pointers
|
|
* @name Phaser.Input#totalActivePointers
|
|
* @property {number} totalActivePointers - The total number of active Pointers.
|
|
* @readonly
|
|
*/
|
|
Object.defineProperty(Phaser.Input.prototype, "totalActivePointers", {
|
|
|
|
get: function () {
|
|
|
|
this.currentPointers = 0;
|
|
|
|
for (var i = 1; i <= 10; i++)
|
|
{
|
|
if (this['pointer' + i] && this['pointer' + i].active)
|
|
{
|
|
this.currentPointers++;
|
|
}
|
|
}
|
|
|
|
return this.currentPointers;
|
|
|
|
}
|
|
|
|
});
|
|
|
|
/**
|
|
* The world X coordinate of the most recently active pointer.
|
|
* @name Phaser.Input#worldX
|
|
* @property {number} worldX - The world X coordinate of the most recently active pointer.
|
|
*/
|
|
Object.defineProperty(Phaser.Input.prototype, "worldX", {
|
|
|
|
get: function () {
|
|
return this.game.camera.view.x + this.x;
|
|
}
|
|
|
|
});
|
|
|
|
/**
|
|
* The world Y coordinate of the most recently active pointer.
|
|
* @name Phaser.Input#worldY
|
|
* @property {number} worldY - The world Y coordinate of the most recently active pointer.
|
|
*/
|
|
Object.defineProperty(Phaser.Input.prototype, "worldY", {
|
|
|
|
get: function () {
|
|
return this.game.camera.view.y + this.y;
|
|
}
|
|
|
|
});
|
|
</pre>
|
|
</article>
|
|
</section>
|
|
|
|
|
|
|
|
|
|
|
|
</div>
|
|
|
|
<div class="clearfix"></div>
|
|
<footer>
|
|
|
|
|
|
<span class="copyright">
|
|
Phaser Copyright © 2012-2014 Photon Storm Ltd.
|
|
</span>
|
|
<br />
|
|
|
|
<span class="jsdoc-message">
|
|
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.3.0-dev</a>
|
|
on Tue Feb 18 2014 03:01:16 GMT-0000 (GMT) using the <a href="https://github.com/terryweiss/docstrap">DocStrap template</a>.
|
|
</span>
|
|
</footer>
|
|
</div>
|
|
|
|
|
|
<br clear="both">
|
|
</div>
|
|
|
|
</div>
|
|
<script src="scripts/sunlight.js"></script>
|
|
<script src="scripts/sunlight.javascript.js"></script>
|
|
<script src="scripts/sunlight-plugin.doclinks.js"></script>
|
|
<script src="scripts/sunlight-plugin.linenumbers.js"></script>
|
|
<script src="scripts/sunlight-plugin.menu.js"></script>
|
|
<script src="scripts/jquery.min.js"></script>
|
|
<script src="scripts/jquery.scrollTo.js"></script>
|
|
<script src="scripts/jquery.localScroll.js"></script>
|
|
<script src="scripts/bootstrap-dropdown.js"></script>
|
|
<script src="scripts/toc.js"></script>
|
|
|
|
|
|
<script> Sunlight.highlightAll({lineNumbers:true, showMenu: true, enableDoclinks :true}); </script>
|
|
|
|
<script>
|
|
$( function () {
|
|
$( "#toc" ).toc( {
|
|
selectors : "h1,h2,h3,h4",
|
|
showAndHide : false,
|
|
scrollTo : 60
|
|
} );
|
|
$( "#toc>ul" ).addClass( "nav nav-pills nav-stacked" );
|
|
$( "#main span[id^='toc']" ).addClass( "toc-shim" );
|
|
|
|
} );
|
|
</script>
|
|
|
|
|
|
|
|
</body>
|
|
</html>
|