mirror of
https://github.com/wassname/phaser.git
synced 2026-08-14 12:40:17 +08:00
Added Group IDs and references to Sprites, Group sorting, z-index values and child swapping. Also added all of the drag and bounds methods to Input.
This commit is contained in:
+7
-4
@@ -295,9 +295,12 @@ module Phaser {
|
||||
|
||||
this.setRenderer(Phaser.Types.RENDERER_CANVAS);
|
||||
|
||||
this.world.boot();
|
||||
this.stage.boot();
|
||||
this.input.boot();
|
||||
|
||||
this.framerate = 60;
|
||||
this.isBooted = true;
|
||||
this.input.start();
|
||||
|
||||
// Display the default game screen?
|
||||
if (this.onInitCallback == null && this.onCreateCallback == null && this.onUpdateCallback == null && this.onRenderCallback == null && this._pendingState == null)
|
||||
@@ -354,7 +357,7 @@ module Phaser {
|
||||
}
|
||||
|
||||
/**
|
||||
* Game loop method will be called when it's booting.
|
||||
* The bootLoop is called while the game is still booting (waiting for the DOM and resources to be available)
|
||||
*/
|
||||
private bootLoop() {
|
||||
|
||||
@@ -365,7 +368,7 @@ module Phaser {
|
||||
}
|
||||
|
||||
/**
|
||||
* Game loop method will be called when it's paused.
|
||||
* The pausedLoop is called when the game is paused.
|
||||
*/
|
||||
private pausedLoop() {
|
||||
|
||||
@@ -563,7 +566,7 @@ module Phaser {
|
||||
}
|
||||
|
||||
/**
|
||||
* Nuke the whole game from orbit
|
||||
* Nuke the entire game from orbit
|
||||
*/
|
||||
public destroy() {
|
||||
|
||||
|
||||
+10
-3
@@ -57,9 +57,6 @@ module Phaser {
|
||||
this.scaleMode = StageScaleMode.NO_SCALE;
|
||||
this.scale = new StageScaleMode(this._game);
|
||||
|
||||
this._bootScreen = new BootScreen(this._game);
|
||||
this._pauseScreen = new PauseScreen(this._game, width, height);
|
||||
|
||||
document.addEventListener('visibilitychange', (event) => this.visibilityChange(event), false);
|
||||
document.addEventListener('webkitvisibilitychange', (event) => this.visibilityChange(event), false);
|
||||
window.onblur = (event) => this.visibilityChange(event);
|
||||
@@ -153,6 +150,16 @@ module Phaser {
|
||||
*/
|
||||
public scaleMode: number;
|
||||
|
||||
/**
|
||||
* Stage boot
|
||||
*/
|
||||
public boot() {
|
||||
|
||||
this._bootScreen = new BootScreen(this._game);
|
||||
this._pauseScreen = new PauseScreen(this._game, this.width, this.height);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Update stage for rendering. This will handle scaling, clearing
|
||||
* and PauseScreen/BootScreen updating and rendering.
|
||||
|
||||
+2
-9
@@ -21,11 +21,10 @@ module Phaser {
|
||||
this.add = game.add;
|
||||
this.camera = game.camera;
|
||||
this.cache = game.cache;
|
||||
//this.collision = game.collision;
|
||||
this.input = game.input;
|
||||
this.loader = game.loader;
|
||||
this.math = game.math;
|
||||
//this.motion = game.motion;
|
||||
this.motion = game.motion;
|
||||
this.sound = game.sound;
|
||||
this.stage = game.stage;
|
||||
this.time = game.time;
|
||||
@@ -51,12 +50,6 @@ module Phaser {
|
||||
*/
|
||||
public cache: Cache;
|
||||
|
||||
/**
|
||||
* Reference to the collision helper.
|
||||
* @type {Collision}
|
||||
*/
|
||||
//public collision: Collision;
|
||||
|
||||
/**
|
||||
* Reference to the GameObject Factory.
|
||||
* @type {GameObjectFactory}
|
||||
@@ -85,7 +78,7 @@ module Phaser {
|
||||
* Reference to the motion helper.
|
||||
* @type {Motion}
|
||||
*/
|
||||
//public motion: Motion;
|
||||
public motion: Motion;
|
||||
|
||||
/**
|
||||
* Reference to the sound manager.
|
||||
|
||||
+20
-4
@@ -31,12 +31,8 @@ module Phaser {
|
||||
|
||||
this.cameras = new CameraManager(this._game, 0, 0, width, height);
|
||||
|
||||
this.group = new Group(this._game, 0);
|
||||
|
||||
this.bounds = new Rectangle(0, 0, width, height);
|
||||
|
||||
this.physics = new Physics.PhysicsManager(this._game, width, height);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -68,6 +64,26 @@ module Phaser {
|
||||
*/
|
||||
public physics: Physics.PhysicsManager;
|
||||
|
||||
/**
|
||||
* Object container stores every object created with `create*` methods.
|
||||
* @type {Group}
|
||||
*/
|
||||
private _groupCounter: number = 0;
|
||||
|
||||
public getNextGroupID(): number {
|
||||
return this._groupCounter++;
|
||||
}
|
||||
|
||||
/**
|
||||
* Called one by Game during the boot process.
|
||||
*/
|
||||
public boot() {
|
||||
|
||||
this.group = new Group(this._game, 0);
|
||||
|
||||
this.physics = new Physics.PhysicsManager(this._game, this.width, this.height);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* This is called automatically every frame, and is where main logic happens.
|
||||
|
||||
@@ -19,6 +19,11 @@ module Phaser.Components {
|
||||
this.game = parent.game;
|
||||
this._sprite = parent;
|
||||
|
||||
this.onAddedToGroup = new Phaser.Signal;
|
||||
this.onRemovedFromGroup = new Phaser.Signal;
|
||||
this.onKilled = new Phaser.Signal;
|
||||
this.onRevived = new Phaser.Signal;
|
||||
|
||||
this.onInputOver = new Phaser.Signal;
|
||||
this.onInputOut = new Phaser.Signal;
|
||||
this.onInputDown = new Phaser.Signal;
|
||||
@@ -36,15 +41,26 @@ module Phaser.Components {
|
||||
*/
|
||||
private _sprite: Sprite;
|
||||
|
||||
// Creation and destruction
|
||||
public onAdded: Phaser.Signal;
|
||||
/**
|
||||
* Dispatched by the Group this Sprite is added to.
|
||||
*/
|
||||
public onAddedToGroup: Phaser.Signal;
|
||||
|
||||
/**
|
||||
* Dispatched by the Group this Sprite is removed from.
|
||||
*/
|
||||
public onRemovedFromGroup: Phaser.Signal;
|
||||
|
||||
/**
|
||||
* Dispatched when this Sprite is killed.
|
||||
*/
|
||||
public onKilled: Phaser.Signal;
|
||||
|
||||
/**
|
||||
* Dispatched when this Sprite is revived.
|
||||
*/
|
||||
public onRevived: Phaser.Signal;
|
||||
|
||||
public onOutOfBounds: Phaser.Signal;
|
||||
|
||||
// Input related events
|
||||
|
||||
/**
|
||||
* Dispatched by the Input component when a pointer moves over an Input enabled sprite.
|
||||
*/
|
||||
@@ -65,6 +81,11 @@ module Phaser.Components {
|
||||
*/
|
||||
public onInputUp: Phaser.Signal;
|
||||
|
||||
|
||||
|
||||
|
||||
public onOutOfBounds: Phaser.Signal;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -39,12 +39,48 @@ module Phaser.Components {
|
||||
*/
|
||||
private _sprite: Sprite;
|
||||
|
||||
private dragOffsetX: number;
|
||||
private dragOffsetY: number;
|
||||
private dragFromPoint: bool;
|
||||
private dragPixelPerfect:bool = false;
|
||||
private dragPixelPerfectAlpha:number;
|
||||
private allowHorizontalDrag: bool = true;
|
||||
private allowVerticalDrag: bool = true;
|
||||
private snapOnDrag: bool = false;
|
||||
private snapOnRelease: bool = false;
|
||||
private snapX: number;
|
||||
private snapY: number;
|
||||
|
||||
/**
|
||||
* If enabled the Input component will be updated by the parent Sprite
|
||||
* @type {Boolean}
|
||||
*/
|
||||
public enabled: bool;
|
||||
|
||||
/**
|
||||
* Is this sprite being dragged by the mouse or not?
|
||||
* @default false
|
||||
*/
|
||||
public isDragged: bool = false;
|
||||
|
||||
/**
|
||||
* Is this sprite allowed to be dragged by the mouse? true = yes, false = no
|
||||
* @default false
|
||||
*/
|
||||
public draggable: bool = false;
|
||||
|
||||
/**
|
||||
* An FlxRect region of the game world within which the sprite is restricted during mouse drag
|
||||
* @default null
|
||||
*/
|
||||
public boundsRect: Rectangle = null;
|
||||
|
||||
/**
|
||||
* An FlxSprite the bounds of which this sprite is restricted during mouse drag
|
||||
* @default null
|
||||
*/
|
||||
public boundsSprite: Sprite = null;
|
||||
|
||||
/**
|
||||
* The Input component can monitor either the physics body of the Sprite or the frameBounds
|
||||
* If checkBody is set to true it will monitor the bounds of the physics body.
|
||||
@@ -129,6 +165,11 @@ module Phaser.Components {
|
||||
return;
|
||||
}
|
||||
|
||||
if (this.draggable && this.isDragged)
|
||||
{
|
||||
this.updateDrag();
|
||||
}
|
||||
|
||||
if (this.game.input.x != this.oldX || this.game.input.y != this.oldY)
|
||||
{
|
||||
this.oldX = this.game.input.x;
|
||||
@@ -172,14 +213,54 @@ module Phaser.Components {
|
||||
|
||||
}
|
||||
|
||||
// click handler to add to stack for sorting
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Updates the Mouse Drag on this Sprite.
|
||||
*/
|
||||
private updateDrag():void
|
||||
{
|
||||
if (this.isUp)
|
||||
{
|
||||
this.stopDrag();
|
||||
return;
|
||||
}
|
||||
|
||||
if (this.allowHorizontalDrag)
|
||||
{
|
||||
this._sprite.x = this.game.input.x - this.dragOffsetX;
|
||||
}
|
||||
|
||||
if (this.allowVerticalDrag)
|
||||
{
|
||||
this._sprite.y = this.game.input.y - this.dragOffsetY;
|
||||
}
|
||||
|
||||
if (this.boundsRect)
|
||||
{
|
||||
this.checkBoundsRect();
|
||||
}
|
||||
|
||||
if (this.boundsSprite)
|
||||
{
|
||||
this.checkBoundsSprite();
|
||||
}
|
||||
|
||||
if (this.snapOnDrag)
|
||||
{
|
||||
this._sprite.x = Math.floor(this._sprite.x / this.snapX) * this.snapX;
|
||||
this._sprite.y = Math.floor(this._sprite.y / this.snapY) * this.snapY;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns true if the pointer has entered the Sprite within the specified delay time (defaults to 500ms, half a second)
|
||||
* @param delay The time below which the pointer is considered as just over.
|
||||
* @returns {boolean}
|
||||
*/
|
||||
public justOver(delay?:number = 500): bool {
|
||||
public justOver(delay?: number = 500): bool {
|
||||
return (this.isOver && this.duration < delay);
|
||||
}
|
||||
|
||||
@@ -188,7 +269,7 @@ module Phaser.Components {
|
||||
* @param delay The time below which the pointer is considered as just out.
|
||||
* @returns {boolean}
|
||||
*/
|
||||
public justOut(delay?:number = 500): bool {
|
||||
public justOut(delay?: number = 500): bool {
|
||||
return (this.isOut && (this.game.time.now - this.timeOut < delay));
|
||||
}
|
||||
|
||||
@@ -207,6 +288,172 @@ module Phaser.Components {
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Make this Sprite draggable by the mouse. You can also optionally set mouseStartDragCallback and mouseStopDragCallback
|
||||
*
|
||||
* @param lockCenter If false the Sprite will drag from where you click it. If true it will center itself to the tip of the mouse pointer.
|
||||
* @param pixelPerfect If true it will use a pixel perfect test to see if you clicked the Sprite. False uses the bounding box.
|
||||
* @param alphaThreshold If using pixel perfect collision this specifies the alpha level from 0 to 255 above which a collision is processed (default 255)
|
||||
* @param boundsRect If you want to restrict the drag of this sprite to a specific FlxRect, pass the FlxRect here, otherwise it's free to drag anywhere
|
||||
* @param boundsSprite If you want to restrict the drag of this sprite to within the bounding box of another sprite, pass it here
|
||||
*/
|
||||
public enableDrag(lockCenter:bool = false, pixelPerfect:bool = false, alphaThreshold:number = 255, boundsRect:Rectangle = null, boundsSprite:Sprite = null):void
|
||||
{
|
||||
this.draggable = true;
|
||||
|
||||
this.dragFromPoint = lockCenter;
|
||||
this.dragPixelPerfect = pixelPerfect;
|
||||
this.dragPixelPerfectAlpha = alphaThreshold;
|
||||
|
||||
if (boundsRect)
|
||||
{
|
||||
this.boundsRect = boundsRect;
|
||||
}
|
||||
|
||||
if (boundsSprite)
|
||||
{
|
||||
this.boundsSprite = boundsSprite;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Stops this sprite from being able to be dragged. If it is currently the target of an active drag it will be stopped immediately. Also disables any set callbacks.
|
||||
*/
|
||||
public disableDrag():void
|
||||
{
|
||||
if (this.isDragged)
|
||||
{
|
||||
//FlxMouseControl.dragTarget = null;
|
||||
//FlxMouseControl.isDragging = false;
|
||||
}
|
||||
|
||||
this.isDragged = false;
|
||||
this.draggable = false;
|
||||
|
||||
//mouseStartDragCallback = null;
|
||||
//mouseStopDragCallback = null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Restricts this sprite to drag movement only on the given axis. Note: If both are set to false the sprite will never move!
|
||||
*
|
||||
* @param allowHorizontal To enable the sprite to be dragged horizontally set to true, otherwise false
|
||||
* @param allowVertical To enable the sprite to be dragged vertically set to true, otherwise false
|
||||
*/
|
||||
public setDragLock(allowHorizontal:bool = true, allowVertical:bool = true):void
|
||||
{
|
||||
this.allowHorizontalDrag = allowHorizontal;
|
||||
this.allowVerticalDrag = allowVertical;
|
||||
}
|
||||
|
||||
/**
|
||||
* Make this Sprite snap to the given grid either during drag or when it's released.
|
||||
* For example 16x16 as the snapX and snapY would make the sprite snap to every 16 pixels.
|
||||
*
|
||||
* @param snapX The width of the grid cell in pixels
|
||||
* @param snapY The height of the grid cell in pixels
|
||||
* @param onDrag If true the sprite will snap to the grid while being dragged
|
||||
* @param onRelease If true the sprite will snap to the grid when released
|
||||
*/
|
||||
public enableSnap(snapX:number , snapY:number, onDrag:bool = true, onRelease:bool = false):void
|
||||
{
|
||||
this.snapOnDrag = onDrag;
|
||||
this.snapOnRelease = onRelease;
|
||||
this.snapX = snapX;
|
||||
this.snapY = snapY;
|
||||
}
|
||||
|
||||
/**
|
||||
* Stops the sprite from snapping to a grid during drag or release.
|
||||
*/
|
||||
public disableSnap():void
|
||||
{
|
||||
this.snapOnDrag = false;
|
||||
this.snapOnRelease = false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Called by FlxMouseControl when Mouse Drag starts on this Sprite. Should not usually be called directly.
|
||||
*/
|
||||
public startDrag():void
|
||||
{
|
||||
this.isDragged = true;
|
||||
|
||||
if (this.dragFromPoint == false)
|
||||
{
|
||||
this.dragOffsetX = this.game.input.x - this._sprite.x;
|
||||
this.dragOffsetY = this.game.input.y - this._sprite.y;
|
||||
}
|
||||
else
|
||||
{
|
||||
// Move the sprite to the middle of the mouse
|
||||
this.dragOffsetX = this._sprite.frameBounds.halfWidth;
|
||||
this.dragOffsetY = this._sprite.frameBounds.halfHeight;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Bounds Rect check for the sprite drag
|
||||
*/
|
||||
private checkBoundsRect():void
|
||||
{
|
||||
if (this._sprite.x < this.boundsRect.left)
|
||||
{
|
||||
this._sprite.x = this.boundsRect.x;
|
||||
}
|
||||
else if ((this._sprite.x + this._sprite.width) > this.boundsRect.right)
|
||||
{
|
||||
this._sprite.x = this.boundsRect.right - this._sprite.width;
|
||||
}
|
||||
|
||||
if (this._sprite.y < this.boundsRect.top)
|
||||
{
|
||||
this._sprite.y = this.boundsRect.top;
|
||||
}
|
||||
else if ((this._sprite.y + this._sprite.height) > this.boundsRect.bottom)
|
||||
{
|
||||
this._sprite.y = this.boundsRect.bottom - this._sprite.height;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Parent Sprite Bounds check for the sprite drag
|
||||
*/
|
||||
private checkBoundsSprite():void
|
||||
{
|
||||
if (this._sprite.x < this.boundsSprite.x)
|
||||
{
|
||||
this._sprite.x = this.boundsSprite.x;
|
||||
}
|
||||
else if ((this._sprite.x + this._sprite.width) > (this.boundsSprite.x + this.boundsSprite.width))
|
||||
{
|
||||
this._sprite.x = (this.boundsSprite.x + this.boundsSprite.width) - this._sprite.width;
|
||||
}
|
||||
|
||||
if (this._sprite.y < this.boundsSprite.y)
|
||||
{
|
||||
this._sprite.y = this.boundsSprite.y;
|
||||
}
|
||||
else if ((this._sprite.y + this._sprite.height) > (this.boundsSprite.y + this.boundsSprite.height))
|
||||
{
|
||||
this._sprite.y = (this.boundsSprite.y + this.boundsSprite.height) - this._sprite.height;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Called by FlxMouseControl when Mouse Drag is stopped on this Sprite. Should not usually be called directly.
|
||||
*/
|
||||
public stopDrag():void
|
||||
{
|
||||
this.isDragged = false;
|
||||
|
||||
if (this.snapOnRelease)
|
||||
{
|
||||
this._sprite.x = Math.floor(this._sprite.x / this.snapX) * this.snapX;
|
||||
this._sprite.y = Math.floor(this._sprite.y / this.snapY) * this.snapY;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Render debug infos. (including name, bounds info, position and some other properties)
|
||||
* @param x {number} X position of the debug info to be rendered.
|
||||
|
||||
+144
-36
@@ -27,6 +27,8 @@ module Phaser {
|
||||
|
||||
this.cameraBlacklist = [];
|
||||
|
||||
this.ID = this.game.world.getNextGroupID();
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -43,7 +45,7 @@ module Phaser {
|
||||
/**
|
||||
* Helper for sort.
|
||||
*/
|
||||
private _sortIndex: string;
|
||||
private _sortIndex: string = '';
|
||||
|
||||
/**
|
||||
* Helper for sort.
|
||||
@@ -59,6 +61,11 @@ module Phaser {
|
||||
private _prevAlpha: number;
|
||||
private _count: number;
|
||||
|
||||
/**
|
||||
* This keeps track of the z value of any game object added to this Group
|
||||
*/
|
||||
private _zCounter: number = 0;
|
||||
|
||||
/**
|
||||
* Reference to the main game object
|
||||
*/
|
||||
@@ -69,6 +76,21 @@ module Phaser {
|
||||
*/
|
||||
public type: number;
|
||||
|
||||
/**
|
||||
* The unique Group ID
|
||||
*/
|
||||
public ID: number = -1;
|
||||
|
||||
/**
|
||||
* The z value of this Group (within its parent Group, if any)
|
||||
*/
|
||||
public z: number = -1;
|
||||
|
||||
/**
|
||||
* The Group this Group is a child of (if any).
|
||||
*/
|
||||
public group: Group = null;
|
||||
|
||||
/**
|
||||
* If this Group exists or not. Can be set to false to skip certain loop checks.
|
||||
*/
|
||||
@@ -122,6 +144,13 @@ module Phaser {
|
||||
*/
|
||||
public cameraBlacklist: number[];
|
||||
|
||||
/**
|
||||
* Gets the next z index value for children of this Group
|
||||
*/
|
||||
public getNextZIndex(): number {
|
||||
return this._zCounter++;
|
||||
}
|
||||
|
||||
/**
|
||||
* Override this function to handle any deleting or "shutdown" type operations you might need,
|
||||
* such as removing traditional Flash children like Basic objects.
|
||||
@@ -266,7 +295,7 @@ module Phaser {
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds a new <code>Basic</code> subclass (Basic, GameObject, Sprite, etc) to the group.
|
||||
* Adds a new Game Object to the group.
|
||||
* Group will try to replace a null member of the array first.
|
||||
* Failing that, Group will add it to the end of the member array,
|
||||
* assuming there is room for it, and doubling the size of the array if necessary.
|
||||
@@ -275,17 +304,19 @@ module Phaser {
|
||||
* the object will NOT be added to the group!</p>
|
||||
*
|
||||
* @param {Basic} Object The object you want to add to the group.
|
||||
* @return {Basic} The same <code>Basic</code> object that was passed in.
|
||||
* @return {Basic} The same object that was passed in.
|
||||
*/
|
||||
public add(object): any {
|
||||
|
||||
//Don't bother adding an object twice.
|
||||
if (this.members.indexOf(Object) >= 0)
|
||||
// Is this object already in another Group?
|
||||
|
||||
// You can't add a Group to itself or an object to the same Group twice
|
||||
if (object.group && (object.group.ID == this.ID || (object.type == Types.GROUP && object.ID == this.ID)))
|
||||
{
|
||||
return object;
|
||||
}
|
||||
|
||||
//First, look for a null entry where we can add the object.
|
||||
// First, look for a null entry where we can add the object.
|
||||
this._i = 0;
|
||||
this._length = this.members.length;
|
||||
|
||||
@@ -295,6 +326,8 @@ module Phaser {
|
||||
{
|
||||
this.members[this._i] = object;
|
||||
|
||||
this.setObjectIDs(object);
|
||||
|
||||
if (this._i >= this.length)
|
||||
{
|
||||
this.length = this._i + 1;
|
||||
@@ -306,7 +339,7 @@ module Phaser {
|
||||
this._i++;
|
||||
}
|
||||
|
||||
//Failing that, expand the array (if we can) and add the object.
|
||||
// Failing that, expand the array (if we can) and add the object.
|
||||
if (this._maxSize > 0)
|
||||
{
|
||||
if (this.members.length >= this._maxSize)
|
||||
@@ -327,15 +360,57 @@ module Phaser {
|
||||
this.members.length *= 2;
|
||||
}
|
||||
|
||||
//If we made it this far, then we successfully grew the group,
|
||||
//and we can go ahead and add the object at the first open slot.
|
||||
// If we made it this far, then we successfully grew the group,
|
||||
// and we can go ahead and add the object at the first open slot.
|
||||
this.members[this._i] = object;
|
||||
this.length = this._i + 1;
|
||||
|
||||
this.setObjectIDs(object);
|
||||
|
||||
return object;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a new Sprite within this Group at the specified position.
|
||||
*
|
||||
* @param x {number} X position of the new sprite.
|
||||
* @param y {number} Y position of the new sprite.
|
||||
* @param [key] {string} The image key as defined in the Game.Cache to use as the texture for this sprite
|
||||
* @param [bodyType] {number} The physics body type of the object (defaults to BODY_DISABLED)
|
||||
* @returns {Sprite} The newly created sprite object.
|
||||
*/
|
||||
public addNewSprite(x: number, y: number, key?: string = '', bodyType?: number = Phaser.Types.BODY_DISABLED): Sprite {
|
||||
return <Sprite> this.add(new Sprite(this.game, x, y, key, bodyType));
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets all of the game object properties needed to exist within this Group.
|
||||
*/
|
||||
private setObjectIDs(object, zIndex: number = -1) {
|
||||
|
||||
// If the object is already in another Group, inform that Group it has left
|
||||
if (object.group !== null)
|
||||
{
|
||||
object.group.remove(object);
|
||||
}
|
||||
|
||||
object.group = this;
|
||||
|
||||
if (zIndex == -1)
|
||||
{
|
||||
zIndex = this.getNextZIndex();
|
||||
}
|
||||
|
||||
object.z = zIndex;
|
||||
|
||||
if (object['events'])
|
||||
{
|
||||
object['events'].onAddedToGroup.dispatch(object, this, object.z);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Recycling is designed to help you reuse game objects without always re-allocating or "newing" them.
|
||||
*
|
||||
@@ -405,7 +480,7 @@ module Phaser {
|
||||
/**
|
||||
* Removes an object from the group.
|
||||
*
|
||||
* @param {Basic} object The <code>Basic</code> you want to remove.
|
||||
* @param {Basic} object The Game Object you want to remove.
|
||||
* @param {boolean} splice Whether the object should be cut from the array entirely or not.
|
||||
*
|
||||
* @return {Basic} The removed object.
|
||||
@@ -429,12 +504,19 @@ module Phaser {
|
||||
this.members[this._i] = null;
|
||||
}
|
||||
|
||||
if (object['events'])
|
||||
{
|
||||
object['events'].onRemovedFromGroup.dispatch(object, this);
|
||||
}
|
||||
|
||||
object.group = null;
|
||||
object.z = -1;
|
||||
return object;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Replaces an existing <code>Basic</code> with a new one.
|
||||
* Replaces an existing game object in this Group with a new one.
|
||||
*
|
||||
* @param {Basic} oldObject The object you want to replace.
|
||||
* @param {Basic} newObject The new object you want to use instead.
|
||||
@@ -450,12 +532,38 @@ module Phaser {
|
||||
return null;
|
||||
}
|
||||
|
||||
this.setObjectIDs(newObject, this.members[this._i].z);
|
||||
|
||||
// Null the old object
|
||||
this.remove(this.members[this._i]);
|
||||
|
||||
this.members[this._i] = newObject;
|
||||
|
||||
return newObject;
|
||||
|
||||
}
|
||||
|
||||
public swap(child1, child2, sort?: bool = true): bool {
|
||||
|
||||
if (child1.group.ID != this.ID || child2.group.ID != this.ID || child1 === child2)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
var tempZ: number = child1.z;
|
||||
|
||||
child1.z = child2.z;
|
||||
child2.z = tempZ;
|
||||
|
||||
if (sort)
|
||||
{
|
||||
this.sort();
|
||||
}
|
||||
|
||||
return true;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Call this function to sort the group according to a particular value and order.
|
||||
* For example, to sort game objects for Zelda-style overlaps you might call
|
||||
@@ -466,11 +574,34 @@ module Phaser {
|
||||
* @param {string} index The <code>string</code> name of the member variable you want to sort on. Default value is "y".
|
||||
* @param {number} order A <code>Group</code> constant that defines the sort order. Possible values are <code>Group.ASCENDING</code> and <code>Group.DESCENDING</code>. Default value is <code>Group.ASCENDING</code>.
|
||||
*/
|
||||
public sort(index: string = "y", order: number = Group.ASCENDING) {
|
||||
public sort(index: string = 'z', order: number = Group.ASCENDING) {
|
||||
|
||||
this._sortIndex = index;
|
||||
this._sortOrder = order;
|
||||
this.members.sort(this.sortHandler);
|
||||
this.members.sort((a, b) => this.sortHandler(a, b));
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper function for the sort process.
|
||||
*
|
||||
* @param {Basic} Obj1 The first object being sorted.
|
||||
* @param {Basic} Obj2 The second object being sorted.
|
||||
*
|
||||
* @return {number} An integer value: -1 (Obj1 before Obj2), 0 (same), or 1 (Obj1 after Obj2).
|
||||
*/
|
||||
public sortHandler(obj1, obj2): number {
|
||||
|
||||
if (obj1[this._sortIndex] < obj2[this._sortIndex])
|
||||
{
|
||||
return this._sortOrder;
|
||||
}
|
||||
else if (obj1[this._sortIndex] > obj2[this._sortIndex])
|
||||
{
|
||||
return -this._sortOrder;
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
||||
}
|
||||
|
||||
@@ -821,29 +952,6 @@ module Phaser {
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper function for the sort process.
|
||||
*
|
||||
* @param {Basic} Obj1 The first object being sorted.
|
||||
* @param {Basic} Obj2 The second object being sorted.
|
||||
*
|
||||
* @return {number} An integer value: -1 (Obj1 before Obj2), 0 (same), or 1 (Obj1 after Obj2).
|
||||
*/
|
||||
public sortHandler(obj1, obj2): number {
|
||||
|
||||
if (obj1[this._sortIndex] < obj2[this._sortIndex])
|
||||
{
|
||||
return this._sortOrder;
|
||||
}
|
||||
else if (obj1[this._sortIndex] > obj2[this._sortIndex])
|
||||
{
|
||||
return -this._sortOrder;
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -9,6 +9,16 @@ module Phaser {
|
||||
*/
|
||||
game: Game;
|
||||
|
||||
/**
|
||||
* The type of game object.
|
||||
*/
|
||||
type: number;
|
||||
|
||||
/**
|
||||
* The ID of the Group this Sprite belongs to.
|
||||
*/
|
||||
group: Group;
|
||||
|
||||
/**
|
||||
* x value of the object.
|
||||
*/
|
||||
@@ -24,16 +34,6 @@ module Phaser {
|
||||
*/
|
||||
z: number;
|
||||
|
||||
/**
|
||||
* The type of game object.
|
||||
*/
|
||||
type: number;
|
||||
|
||||
/**
|
||||
* Reference to the Renderer.renderSprite method. Can be overriden by custom classes.
|
||||
*/
|
||||
//render;
|
||||
|
||||
/**
|
||||
* Controls if both <code>update</code> and render are called by the core game loop.
|
||||
*/
|
||||
|
||||
@@ -41,7 +41,8 @@ module Phaser {
|
||||
|
||||
this.x = x;
|
||||
this.y = y;
|
||||
this.z = 0; // not used yet
|
||||
this.z = -1;
|
||||
this.group = null;
|
||||
|
||||
// If a texture has been given the body will be set to that size, otherwise 16x16
|
||||
this.body = new Phaser.Physics.Body(this, bodyType);
|
||||
@@ -69,6 +70,11 @@ module Phaser {
|
||||
*/
|
||||
public type: number;
|
||||
|
||||
/**
|
||||
* The Group this Sprite belongs to.
|
||||
*/
|
||||
public group: Group;
|
||||
|
||||
/**
|
||||
* Controls if both <code>update</code> and render are called by the core game loop.
|
||||
*/
|
||||
@@ -310,6 +316,7 @@ module Phaser {
|
||||
* Clean up memory.
|
||||
*/
|
||||
public destroy() {
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -319,9 +326,18 @@ module Phaser {
|
||||
* like to animate an effect or whatever, you should override this,
|
||||
* setting only alive to false, and leaving exists true.
|
||||
*/
|
||||
public kill() {
|
||||
public kill(removeFromGroup:bool = false) {
|
||||
|
||||
this.alive = false;
|
||||
this.exists = false;
|
||||
|
||||
if (removeFromGroup && this.group)
|
||||
{
|
||||
this.group.remove(this);
|
||||
}
|
||||
|
||||
this.events.onKilled.dispatch(this);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -329,8 +345,12 @@ module Phaser {
|
||||
* In practice, this is most often called by <code>Object.reset()</code>.
|
||||
*/
|
||||
public revive() {
|
||||
|
||||
this.alive = true;
|
||||
this.exists = true;
|
||||
|
||||
this.events.onRevived.dispatch(this);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
+35
-1
@@ -23,6 +23,7 @@ module Phaser {
|
||||
constructor(game: Game) {
|
||||
|
||||
this._game = game;
|
||||
this._stack = [];
|
||||
|
||||
this.mousePointer = new Pointer(this._game, 0);
|
||||
this.pointer1 = new Pointer(this._game, 1);
|
||||
@@ -42,7 +43,9 @@ module Phaser {
|
||||
this.onTap = new Phaser.Signal();
|
||||
this.onHold = new Phaser.Signal();
|
||||
|
||||
this.speed = new Vec2;
|
||||
this.position = new Vec2;
|
||||
this._oldPosition = new Vec2;
|
||||
this.circle = new Circle(0, 0, 44);
|
||||
|
||||
this.currentPointers = 0;
|
||||
@@ -54,6 +57,18 @@ module Phaser {
|
||||
*/
|
||||
private _game: Game;
|
||||
|
||||
/**
|
||||
* Temporary click sorting stack
|
||||
*/
|
||||
private _stack;
|
||||
|
||||
/**
|
||||
* A vector object representing the previous position of the Pointer.
|
||||
* @property vector
|
||||
* @type {Vec2}
|
||||
**/
|
||||
private _oldPosition: Vec2 = null;
|
||||
|
||||
/**
|
||||
* 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
|
||||
@@ -121,6 +136,14 @@ module Phaser {
|
||||
**/
|
||||
public position: Vec2 = null;
|
||||
|
||||
/**
|
||||
* A vector object representing the speed of the Pointer. Only really useful in single Pointer games,
|
||||
* otherwise see the Pointer objects directly.
|
||||
* @property vector
|
||||
* @type {Vec2}
|
||||
**/
|
||||
public speed: Vec2 = 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
|
||||
@@ -415,7 +438,7 @@ module Phaser {
|
||||
* Starts the Input Manager running
|
||||
* @method start
|
||||
**/
|
||||
public start() {
|
||||
public boot() {
|
||||
|
||||
this.mouse.start();
|
||||
this.keyboard.start();
|
||||
@@ -431,6 +454,11 @@ module Phaser {
|
||||
**/
|
||||
public update() {
|
||||
|
||||
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();
|
||||
this.pointer1.update();
|
||||
this.pointer2.update();
|
||||
@@ -446,6 +474,12 @@ module Phaser {
|
||||
|
||||
}
|
||||
|
||||
public addToStack(item) {
|
||||
|
||||
this._stack.push(item);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Reset all of the Pointers and Input states
|
||||
* @method reset
|
||||
|
||||
+16
-1
@@ -1,5 +1,20 @@
|
||||
/**
|
||||
* Phaser
|
||||
*
|
||||
* v1.0.0 - June XX 2013
|
||||
*
|
||||
* A small and feature-packed 2D canvas game framework born from the firey pits of Flixel and Kiwi.
|
||||
*
|
||||
* Richard Davey (@photonstorm)
|
||||
*
|
||||
* Many thanks to Adam Saltsman (@ADAMATOMIC) for releasing Flixel, from both which Phaser
|
||||
* and my love of game development took a lot of inspiration.
|
||||
*
|
||||
* "If you want your children to be intelligent, read them fairy tales."
|
||||
* "If you want them to be more intelligent, read them more fairy tales."
|
||||
* -- Albert Einstein
|
||||
*/
|
||||
var Phaser;
|
||||
(function (Phaser) {
|
||||
Phaser.VERSION = 'Phaser version 1.0.0';
|
||||
})(Phaser || (Phaser = {}));
|
||||
//@ sourceMappingURL=Phaser.js.map
|
||||
|
||||
Reference in New Issue
Block a user