mirror of
https://github.com/wassname/phaser.git
synced 2026-07-16 01:20:13 +08:00
Working on Linked List node swapping.
This commit is contained in:
@@ -0,0 +1,251 @@
|
||||
<!DOCTYPE HTML>
|
||||
<html>
|
||||
<head>
|
||||
<title>phaser.js - a new beginning</title>
|
||||
<?php
|
||||
require('js.php');
|
||||
?>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<script type="text/javascript">
|
||||
|
||||
(function () {
|
||||
|
||||
var game = new Phaser.Game(800, 600, Phaser.CANVAS, '', { preload: preload, create: create, update: update, render: render });
|
||||
|
||||
function preload() {
|
||||
game.load.image('sonic', 'assets/sprites/sonic_havok_sanity.png');
|
||||
}
|
||||
|
||||
var s;
|
||||
var a;
|
||||
var b;
|
||||
var c;
|
||||
var d;
|
||||
var e;
|
||||
var f;
|
||||
|
||||
function create() {
|
||||
|
||||
s = game.add.sprite(game.world.centerX, game.world.centerY, 'sonic');
|
||||
s.name = 'X';
|
||||
|
||||
a = game.add.child(s, -50, 0, 'sonic');
|
||||
b = game.add.child(s, -100, 0, 'sonic');
|
||||
c = game.add.child(s, -150, 0, 'sonic');
|
||||
d = game.add.child(s, -200, 0, 'sonic');
|
||||
e = game.add.child(s, -250, 0, 'sonic');
|
||||
f = game.add.child(s, -300, 0, 'sonic');
|
||||
|
||||
a.name = 'a';
|
||||
b.name = 'b';
|
||||
c.name = 'c';
|
||||
d.name = 'd';
|
||||
e.name = 'e';
|
||||
f.name = 'f';
|
||||
|
||||
game.input.onUp.add(runChange, this);
|
||||
|
||||
scanList(s);
|
||||
|
||||
}
|
||||
|
||||
function runChange () {
|
||||
changeOrder(a, d);
|
||||
}
|
||||
|
||||
function changeOrder (node1, node2) {
|
||||
|
||||
console.log('Changing order of', node1.name,'and',node2.name);
|
||||
|
||||
var index1 = s.children.indexOf(node1);
|
||||
var index2 = s.children.indexOf(node2);
|
||||
|
||||
if (index1 !== -1 && index2 !== -1)
|
||||
{
|
||||
// check for neighbours (cater for any order parameters)
|
||||
if (node1._iNext == node2)
|
||||
{
|
||||
console.log('A-B neighbour swap');
|
||||
|
||||
// Pre-swap:
|
||||
// X next: a prev: - first: X last: d
|
||||
// a next: b prev: X first: a last: a
|
||||
// b next: c prev: a first: b last: b
|
||||
// c next: d prev: b first: c last: c
|
||||
// d next: - prev: c first: d last: d
|
||||
|
||||
// Post-swap:
|
||||
// X next: b prev: - first: X last: d
|
||||
// b next: a prev: X first: b last: b
|
||||
// a next: c prev: b first: a last: a
|
||||
// c next: d prev: a first: c last: c
|
||||
// d next: - prev: c first: d last: d
|
||||
|
||||
var node1Prev = node1._iPrev;
|
||||
var node1Next = node1._iNext;
|
||||
var node2Prev = node2._iPrev;
|
||||
var node2Next = node2._iNext;
|
||||
|
||||
// Starting
|
||||
// Node 1 (A) Node 2 (B) X C
|
||||
// Next: B Next: C Next: A Next: D
|
||||
// Prev: X Prev: A Prev: - Prev: B
|
||||
|
||||
// Ending
|
||||
// Node 1 (A) Node 2 (B) X C
|
||||
// Next: C Next: A Next: B Next: D
|
||||
// Prev: B Prev: X Prev: - Prev: A
|
||||
|
||||
node1._iNext = node2Next;
|
||||
node1._iPrev = node2;
|
||||
node2._iNext = node1;
|
||||
node2._iPrev = node1Prev;
|
||||
|
||||
// Notify the head and tail
|
||||
if (node1Prev)
|
||||
{
|
||||
node1Prev._iNext = node2;
|
||||
}
|
||||
|
||||
if (node2Next)
|
||||
{
|
||||
node2Next._iPrev = node1;
|
||||
}
|
||||
}
|
||||
else if (node2._iNext == node1)
|
||||
{
|
||||
console.log('B-A neighbour swap');
|
||||
|
||||
// Pre-swap:
|
||||
// X next: a prev: - first: X last: d
|
||||
// a next: b prev: X first: a last: a
|
||||
// b next: c prev: a first: b last: b
|
||||
// c next: d prev: b first: c last: c
|
||||
// d next: - prev: c first: d last: d
|
||||
|
||||
// Post-swap:
|
||||
// X next: b prev: - first: X last: d
|
||||
// b next: a prev: X first: b last: b
|
||||
// a next: c prev: b first: a last: a
|
||||
// c next: d prev: a first: c last: c
|
||||
// d next: - prev: c first: d last: d
|
||||
|
||||
var node1Prev = node1._iPrev;
|
||||
var node1Next = node1._iNext;
|
||||
var node2Prev = node2._iPrev;
|
||||
var node2Next = node2._iNext;
|
||||
|
||||
// Starting
|
||||
// Node 1 (B) Node 2 (A) X C
|
||||
// Next: C Next: B Next: A Next: D
|
||||
// Prev: A Prev: X Prev: - Prev: B
|
||||
|
||||
// Ending
|
||||
// Node 1 (B) Node 2 (A) X C
|
||||
// Next: A Next: C Next: B Next: D
|
||||
// Prev: X Prev: B Prev: - Prev: A
|
||||
|
||||
node1._iNext = node2;
|
||||
node1._iPrev = node2Prev;
|
||||
node2._iNext = node1Next;
|
||||
node2._iPrev = node1;
|
||||
|
||||
// Notify the head and tail
|
||||
if (node2Prev)
|
||||
{
|
||||
node2Prev._iNext = node1;
|
||||
}
|
||||
|
||||
if (node1Next)
|
||||
{
|
||||
node2Next._iPrev = node2;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
scanList(s);
|
||||
|
||||
}
|
||||
|
||||
function scanList (sprite) {
|
||||
|
||||
var displayObject = sprite;
|
||||
|
||||
var testObject = displayObject.last._iNext;
|
||||
displayObject = displayObject.first;
|
||||
|
||||
do
|
||||
{
|
||||
var name = displayObject.name || 'nuffin';
|
||||
var nameNext = '-';
|
||||
var namePrev = '-';
|
||||
var nameFirst = '-';
|
||||
var nameLast = '-';
|
||||
|
||||
if (displayObject._iNext)
|
||||
{
|
||||
nameNext = displayObject._iNext.name;
|
||||
}
|
||||
|
||||
if (displayObject._iPrev)
|
||||
{
|
||||
namePrev = displayObject._iPrev.name;
|
||||
}
|
||||
|
||||
if (displayObject.first)
|
||||
{
|
||||
nameFirst = displayObject.first.name;
|
||||
}
|
||||
|
||||
if (displayObject.last)
|
||||
{
|
||||
nameLast = displayObject.last.name;
|
||||
}
|
||||
|
||||
if (typeof nameNext === 'undefined')
|
||||
{
|
||||
nameNext = '-';
|
||||
}
|
||||
|
||||
if (typeof namePrev === 'undefined')
|
||||
{
|
||||
namePrev = '-';
|
||||
}
|
||||
|
||||
if (typeof nameFirst === 'undefined')
|
||||
{
|
||||
nameFirst = '-';
|
||||
}
|
||||
|
||||
if (typeof nameLast === 'undefined')
|
||||
{
|
||||
nameLast = '-';
|
||||
}
|
||||
|
||||
console.log('node:', name, 'next:', nameNext, 'prev:', namePrev, 'first:', nameFirst, 'last:', nameLast);
|
||||
|
||||
displayObject = displayObject._iNext;
|
||||
|
||||
}
|
||||
while(displayObject != testObject)
|
||||
|
||||
}
|
||||
|
||||
function update() {
|
||||
}
|
||||
|
||||
function render() {
|
||||
|
||||
// game.debug.renderSpriteCorners(s, false, false);
|
||||
// game.debug.renderSpriteInfo(s, 20, 32);
|
||||
|
||||
}
|
||||
|
||||
})();
|
||||
|
||||
</script>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
@@ -25,6 +25,23 @@ Phaser.GameObjectFactory.prototype = {
|
||||
|
||||
},
|
||||
|
||||
/**
|
||||
* Create a new Sprite with specific position and sprite sheet key.
|
||||
*
|
||||
* @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 [frame] {string|number} If the sprite uses an image from a texture atlas or sprite sheet you can pass the frame here. Either a number for a frame ID or a string for a frame name.
|
||||
* @returns {Sprite} The newly created sprite object.
|
||||
*/
|
||||
child: function (parent, x, y, key, frame) {
|
||||
|
||||
var child = this.world.add(new Phaser.Sprite(this.game, x, y, key, frame));
|
||||
parent.addChild(child);
|
||||
return child;
|
||||
|
||||
},
|
||||
|
||||
/**
|
||||
* Create a tween object for a specific object. The object can be any JavaScript object or Phaser object such as Sprite.
|
||||
*
|
||||
|
||||
+4
-4
@@ -13,9 +13,9 @@ Phaser.Input = function (game) {
|
||||
|
||||
};
|
||||
|
||||
Phaser.Mouse_OVERRIDES_TOUCH = 0;
|
||||
Phaser.Touch_OVERRIDES_MOUSE = 1;
|
||||
Phaser.Mouse_TOUCH_COMBINE = 2;
|
||||
Phaser.Input.MOUSE_OVERRIDES_TOUCH = 0;
|
||||
Phaser.Input.TOUCH_OVERRIDES_MOUSE = 1;
|
||||
Phaser.Input.MOUSE_TOUCH_COMBINE = 2;
|
||||
|
||||
Phaser.Input.prototype = {
|
||||
|
||||
@@ -60,7 +60,7 @@ Phaser.Input.prototype = {
|
||||
/**
|
||||
* Controls the expected behaviour when using a mouse and touch together on a multi-input device
|
||||
*/
|
||||
multiInputOverride: Phaser.Mouse_TOUCH_COMBINE,
|
||||
multiInputOverride: Phaser.Input.MOUSE_TOUCH_COMBINE,
|
||||
|
||||
/**
|
||||
* A vector object representing the current position of the Pointer.
|
||||
|
||||
@@ -238,7 +238,7 @@ Phaser.Pointer.prototype = {
|
||||
// x and y are the old values here?
|
||||
this.positionDown.setTo(this.x, this.y);
|
||||
|
||||
if (this.game.input.multiInputOverride == Phaser.Mouse_OVERRIDES_TOUCH || this.game.input.multiInputOverride == Phaser.Mouse_TOUCH_COMBINE || (this.game.input.multiInputOverride == Phaser.Touch_OVERRIDES_MOUSE && this.game.input.currentPointers == 0))
|
||||
if (this.game.input.multiInputOverride == Phaser.Input.MOUSE_OVERRIDES_TOUCH || this.game.input.multiInputOverride == Phaser.Input.MOUSE_TOUCH_COMBINE || (this.game.input.multiInputOverride == Phaser.Input.TOUCH_OVERRIDES_MOUSE && this.game.input.currentPointers == 0))
|
||||
{
|
||||
//this.game.input.x = this.x * this.game.input.scale.x;
|
||||
//this.game.input.y = this.y * this.game.input.scale.y;
|
||||
@@ -272,7 +272,7 @@ Phaser.Pointer.prototype = {
|
||||
{
|
||||
if (this._holdSent == false && this.duration >= this.game.input.holdRate)
|
||||
{
|
||||
if (this.game.input.multiInputOverride == Phaser.Mouse_OVERRIDES_TOUCH || this.game.input.multiInputOverride == Phaser.Mouse_TOUCH_COMBINE || (this.game.input.multiInputOverride == Phaser.Touch_OVERRIDES_MOUSE && this.game.input.currentPointers == 0))
|
||||
if (this.game.input.multiInputOverride == Phaser.Input.MOUSE_OVERRIDES_TOUCH || this.game.input.multiInputOverride == Phaser.Input.MOUSE_TOUCH_COMBINE || (this.game.input.multiInputOverride == Phaser.Input.TOUCH_OVERRIDES_MOUSE && this.game.input.currentPointers == 0))
|
||||
{
|
||||
this.game.input.onHold.dispatch(this);
|
||||
}
|
||||
@@ -295,9 +295,6 @@ Phaser.Pointer.prototype = {
|
||||
this._history.shift();
|
||||
}
|
||||
}
|
||||
|
||||
// Check which camera they are over
|
||||
// this.camera = this.game.world.cameras.getCameraUnderPoint(this.x, this.y);
|
||||
}
|
||||
|
||||
},
|
||||
@@ -335,7 +332,7 @@ Phaser.Pointer.prototype = {
|
||||
this.circle.x = this.x;
|
||||
this.circle.y = this.y;
|
||||
|
||||
if (this.game.input.multiInputOverride == Phaser.Mouse_OVERRIDES_TOUCH || this.game.input.multiInputOverride == Phaser.Mouse_TOUCH_COMBINE || (this.game.input.multiInputOverride == Phaser.Touch_OVERRIDES_MOUSE && this.game.input.currentPointers == 0))
|
||||
if (this.game.input.multiInputOverride == Phaser.Input.MOUSE_OVERRIDES_TOUCH || this.game.input.multiInputOverride == Phaser.Input.MOUSE_TOUCH_COMBINE || (this.game.input.multiInputOverride == Phaser.Input.TOUCH_OVERRIDES_MOUSE && this.game.input.currentPointers == 0))
|
||||
{
|
||||
this.game.input.activePointer = this;
|
||||
this.game.input.x = this.x;
|
||||
@@ -453,7 +450,7 @@ Phaser.Pointer.prototype = {
|
||||
|
||||
this.timeUp = this.game.time.now;
|
||||
|
||||
if (this.game.input.multiInputOverride == Phaser.Mouse_OVERRIDES_TOUCH || this.game.input.multiInputOverride == Phaser.Mouse_TOUCH_COMBINE || (this.game.input.multiInputOverride == Phaser.Touch_OVERRIDES_MOUSE && this.game.input.currentPointers == 0))
|
||||
if (this.game.input.multiInputOverride == Phaser.Input.MOUSE_OVERRIDES_TOUCH || this.game.input.multiInputOverride == Phaser.Input.MOUSE_TOUCH_COMBINE || (this.game.input.multiInputOverride == Phaser.Input.TOUCH_OVERRIDES_MOUSE && this.game.input.currentPointers == 0))
|
||||
{
|
||||
this.game.input.onUp.dispatch(this);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user