User prompt
move it higher again
User prompt
move it higher again
User prompt
move it higher again
User prompt
move it lower
User prompt
move it higher, its not centered
User prompt
center the score and the shadow in the center of the playspace
User prompt
make the score twice bigger
User prompt
make sure the score has a tween animation ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
make sure to only add 1 to the score when an enemy is killed
User prompt
function updateScoreDisplay() { // Remove the old scoreTxt from the game game.removeChild(scoreTxt); // Create a new score container with the updated score scoreTxt = createScoreText(score); scoreTxt.scaleX = 1.0; scoreTxt.scaleY = 1.0; game.addChild(scoreTxt); }
User prompt
function updateScoreDisplay() { if (!scoreTxt) { return; } // Remove the old scoreTxt game.removeChild(scoreTxt); // Create a new one with the updated score scoreTxt = createScoreText(score); scoreTxt.scaleX = 1.0; scoreTxt.scaleY = 1.0; game.addChild(scoreTxt); }
User prompt
// Comment out the tween for testing: // tween(scoreTxt, { scaleX: 1.5, scaleY: 1.5 }, { ... });
User prompt
mainText.text = String(score); shadowText.text = String(score); if (typeof mainText.refresh === 'function') { mainText.refresh(); } if (typeof shadowText.refresh === 'function') { shadowText.refresh(); }
User prompt
force refresh text2 after every destroyed enemy
User prompt
Move the scoreboard to a very different location
User prompt
Comment out the entire scoreTxt creation (or set scoreTxt.visible = false;).
User prompt
Verify that the scoreTxt has the right children and that updating .text actually changes the displayed number.
Code edit (1 edits merged)
Please save this source code
User prompt
Please fix the bug: 'Timeout.tick error: Shape is not defined' in or related to this line: 'var hitbox = new Shape({' Line Number: 440
Code edit (1 edits merged)
Please save this source code
User prompt
do it
User prompt
attach attackcol to player
User prompt
similar to jumpcol, attach attackcol
User prompt
attackcol stays on the ground when player jumps, it should follow
User prompt
attack col doesn't follow the sprite
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); /**** * Classes ****/ // Basic Shape class (so "Shape" is defined) var Shape = Container.expand(function (options) { var self = Container.call(this); self.attachAsset('shape', { width: options.width, height: options.height, anchorX: options.anchorX || 0, anchorY: options.anchorY || 0, color: options.color || 0x66ff00, alpha: typeof options.alpha === 'number' ? options.alpha : 1 }); return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x000000 }); /**** * Game Code ****/ // used for enemy hitboxes // bigger slash collider /**** * Score Setup ****/ var score = 0; var scoreTxt; // container for the score text function updateScoreDisplay() { if (!scoreTxt) { return; } var mainText = scoreTxt.findChildByName('main'); var shadowText = scoreTxt.findChildByName('shadow'); if (mainText && shadowText) { mainText.text = String(score); shadowText.text = String(score); // optional "pulse" tween(scoreTxt, { scaleX: 1.5, scaleY: 1.5 }, { duration: 100, easing: tween.easeOut, onFinish: function onFinish() { tween(scoreTxt, { scaleX: 1.0, scaleY: 1.0 }, { duration: 100, easing: tween.easeIn }); } }); } else { console.warn('⚠️ Could not find "main"/"shadow" text in scoreTxt.'); } } function incrementScore() { score++; updateScoreDisplay(); } function createScoreText(value) { var shadow = new Text2(String(value), { size: 300, fill: 0x000000, fontFamily: "Arial" }); shadow.name = "shadow"; shadow.anchor.set(0.5, 0); shadow.x = 4; shadow.y = 4; var main = new Text2(String(value), { size: 300, fill: 0xFF69B4, fontFamily: "Arial" }); main.name = "main"; main.anchor.set(0.5, 0); var container = new Container(); container.name = "scoreTxt"; container.x = 1024; container.y = 50; container.addChild(shadow); container.addChild(main); return container; } // build the score text container once scoreTxt = createScoreText(score); scoreTxt.scaleX = 1.0; scoreTxt.scaleY = 1.0; LK.playMusic('bgm', { loop: true }); var bg01 = LK.getAsset('bg01', { anchorX: 0.5, anchorY: 0.5, x: 1024, y: 1366 }); game.addChild(bg01); game.addChild(scoreTxt); /**** * Petals ****/ var petals = []; for (var i = 0; i < 50; i++) { var petal = new Container(); petal.attachAsset('petals', { anchorX: 0.5, anchorY: 0.5, rotation: Math.random() * Math.PI * 2 }); petal.x = Math.random() * 2048; petal.y = Math.random() * 2732; petal.speedY = Math.random() * 2 + 1; petal.speedX = Math.random() * 2 - 1; petal.update = function () { this.y += this.speedY; this.x += this.speedX; if (this.y > 2732) { this.y = -50; this.x = Math.random() * 2048; } }; petals.push(petal); game.addChild(petal); } /**** * Player Setup ****/ var player = new Container(); var visualContainer = new Container(); visualContainer.name = 'visual'; var playerSprite = visualContainer.attachAsset('player_idle', { anchorX: 0.5, anchorY: 0.5 }); player.addChild(visualContainer); player.x = 1024; player.y = 2732 - 250; game.addChild(player); /**** * Idle animations ****/ function startBreathingAnimation() { tween(player, { scaleX: 1.05, scaleY: 1.05 }, { duration: 1000, easing: tween.easeInOut, onFinish: function onFinish() { tween(player, { scaleX: 1.0, scaleY: 1.0 }, { duration: 1000, easing: tween.easeInOut, onFinish: startBreathingAnimation }); } }); } function startTiltAnimation() { tween(player, { rotation: Math.PI / 32 }, { duration: 500, easing: tween.easeInOut, onFinish: function onFinish() { tween(player, { rotation: -Math.PI / 32 }, { duration: 500, easing: tween.easeInOut, onFinish: function onFinish() { tween(player, { rotation: 0 }, { duration: 500, easing: tween.easeInOut, onFinish: startTiltAnimation }); } }); } }); } startBreathingAnimation(); startTiltAnimation(); /**** * Attack collider ****/ var attackCol = LK.getAsset('attackcol', { anchorX: 0.5, anchorY: 0.5, alpha: 0.75 // let’s make it partially visible for debugging }); game.addChild(attackCol); attackCol.visible = false; /**** * Swap player sprite ****/ function swapPlayerVisual(newVisualId, x, y) { var flip = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 1; var onDone = arguments.length > 4 ? arguments[4] : undefined; var visualContainer = player.findChildByName('visual'); if (!visualContainer) { visualContainer = new Container(); visualContainer.name = 'visual'; player.addChild(visualContainer); } else { visualContainer.removeChildAt(0); } playerSprite = visualContainer.attachAsset(newVisualId, { anchorX: 0.5, anchorY: 0.5 }); visualContainer.scaleX = flip; player.x = x; player.y = y; if (newVisualId === 'player_jump') { var jumpCol = LK.getAsset('jumpcol', { anchorX: 0.5, anchorY: 0.5, x: x, y: y + player.height / 2, alpha: 1 }); game.addChild(jumpCol); tween(jumpCol, { y: jumpCol.y - 600 }, { duration: 500, easing: tween.easeOut, onFinish: function onFinish() { tween(jumpCol, { y: 2732 - 250 + player.height / 2 }, { duration: 300, easing: tween.bounceOut, onFinish: function onFinish() { jumpCol.destroy(); } }); } }); } if (typeof onDone === 'function') { if (newVisualId === 'player_idle') { startBreathingAnimation(); startTiltAnimation(); } onDone(); } } /**** * Input logic ****/ var isSequenceRunning = false; var isJumping = false; var playerState = 'idle'; game.down = function (x, y) { if (isSequenceRunning) { return; } // Jump if tapped in top 2/3 if (y < 2732 * 2 / 3 && !isJumping) { isJumping = true; LK.getSound('hup').play(); swapPlayerVisual('player_jump', player.x, player.y); // dust for (var i = 0; i < 10; i++) { var p = LK.getAsset('dust', { anchorX: 0.5, anchorY: 0.5, x: player.x + (Math.random() * 100 - 50), y: player.y + (Math.random() * 100 - 50) }); game.addChild(p); tween(p, { alpha: 0, x: p.x + (Math.random() * 200 - 100), y: p.y - Math.random() * 200 }, { duration: 500, onFinish: function onFinish() { p.destroy(); } }); } tween(player, { y: player.y - 600 }, { duration: 500, easing: tween.easeOut, onFinish: function onFinish() { tween(player, { y: 2732 - 250 }, { duration: 300, easing: tween.bounceOut, onFinish: function onFinish() { // landing dust for (var j = 0; j < 10; j++) { var pp = LK.getAsset('dust', { anchorX: 0.5, anchorY: 0.5, x: player.x + (Math.random() * 100 - 50), y: player.y + (Math.random() * 100 - 50) }); game.addChild(pp); tween(pp, { alpha: 0, x: pp.x + (Math.random() * 200 - 100), y: pp.y + Math.random() * 200 }, { duration: 500, onFinish: function onFinish() { pp.destroy(); } }); } isJumping = false; swapPlayerVisual('player_idle', 1024, 2732 - 250, 1, function () { startBreathingAnimation(); startTiltAnimation(); }); var v = player.findChildByName('visual'); if (v) { var dir = v.scaleX < 0 ? -1 : 1; tween(v, { scaleX: dir * 1.3, scaleY: 1.3 }, { duration: 50, onFinish: function onFinish() { tween(v, { scaleX: dir * 1.0, scaleY: 1.0 }, { duration: 100 }); } }); } } }); } }); return; } // Attack if tapped in bottom 1/3 isSequenceRunning = true; var flip = x < 1024 ? -1 : 1; swapPlayerVisual('player_attackf01', 1024, 2732 - 250, flip); LK.getSound('retroslash').play(); var vis = player.findChildByName('visual'); if (vis) { tween(vis, { scaleX: flip * 1.3, scaleY: 1.3 }, { duration: 50, onFinish: function onFinish() { tween(vis, { scaleX: flip * 1.0, scaleY: 1.0 }, { duration: 100 }); } }); } LK.setTimeout(function () { swapPlayerVisual('player_attackf02', 1024, 2732 - 250, flip); // bigger/visible collider, offset so you see it overlapping attackCol.width = 180; attackCol.height = 180; attackCol.x = flip === -1 ? 874 : 1174; attackCol.y = 2732 - 250; attackCol.scaleX = flip; attackCol.visible = true; LK.setTimeout(function () { if (attackCol) { attackCol.visible = false; } swapPlayerVisual('player_idle', 1024, 2732 - 250, 1, function () { startBreathingAnimation(); startTiltAnimation(); }); isSequenceRunning = false; playerState = 'idle'; }, 250); }, 250); }; /**** * Enemies array + spawn ****/ var enemies = []; function spawnEnemy() { var e = new Container(); // shape child as the "hitbox" var hitbox = new Shape({ width: 200, height: 209, anchorX: 0.5, anchorY: 0.5, color: 0x00FF00, alpha: 0.25 // partially visible so you see EXACTLY where the slime's collision is }); // Position it exactly at (0,0) so the container's (x,y) // and shape's anchor alignment match hitbox.x = 0; hitbox.y = 0; e.addChild(hitbox); var gfx = e.attachAsset('enemy01', { anchorX: 0.5, anchorY: 0.5 }); var fromLeft = Math.random() < 0.5; e.x = fromLeft ? -gfx.width / 2 : 2048 + gfx.width / 2; e.y = 2732 - 225; e.speedX = fromLeft ? Math.random() * 4 + 2 : -(Math.random() * 4 + 2); gfx.scaleX = fromLeft ? 1 : -1; var baseY = e.y; function bounce() { tween(e, { y: baseY - 50 }, { duration: 500, easing: tween.bounceInOut, onFinish: function onFinish() { tween(e, { y: baseY }, { duration: 500, easing: tween.bounceInOut, onFinish: bounce }); } }); } bounce(); enemies.push(e); game.addChild(e); } LK.setInterval(spawnEnemy, Math.random() * 1500 + 1000); /**** * Main update ****/ game.update = function () { for (var i = enemies.length - 1; i >= 0; i--) { var e = enemies[i]; e.x += e.speedX; if (e.x < -300 || e.x > 2048 + 300) { var index = enemies.indexOf(e); if (index !== -1) { enemies.splice(index, 1); } e.destroy(); continue; } // Now check collisions if (attackCol.visible && e.intersects(attackCol)) { handleEnemyHit(e, i); } } }; /**** * Enemy hit logic ****/ function handleEnemyHit(enemy, index) { if (!enemies.includes(enemy)) { return; } LK.getSound('slimedeath').play(); if (enemy.bounceTween && typeof enemy.bounceTween.cancel === 'function') { enemy.bounceTween.cancel(); } tween(enemy, { tint: 0xFF0000 }, { duration: 0, onFinish: function onFinish() { tween(enemy, { scaleX: 1.3, scaleY: 1.3 }, { duration: 50, onFinish: function onFinish() { tween(enemy, { scaleX: 0.5, scaleY: 0.5, alpha: 0 }, { duration: 100, onFinish: function onFinish() { var idx = enemies.indexOf(enemy); if (idx !== -1) { enemies.splice(idx, 1); } enemy.destroy(); incrementScore(); } }); } }); } }); } /**** * findChildByName helper ****/ Container.prototype.findChildByName = function (name) { for (var i = 0; i < this.children.length; i++) { if (this.children[i].name === name) { return this.children[i]; } } return null; };
===================================================================
--- original.js
+++ change.js
@@ -5,55 +5,49 @@
/****
* Classes
****/
-// Define a basic Shape class to fix the 'Shape is not defined' error
+// Basic Shape class (so "Shape" is defined)
var Shape = Container.expand(function (options) {
var self = Container.call(this);
- var shapeGraphics = self.attachAsset('shape', {
+ self.attachAsset('shape', {
width: options.width,
height: options.height,
- anchorX: options.anchorX,
- anchorY: options.anchorY,
- color: options.color,
- alpha: options.alpha
+ anchorX: options.anchorX || 0,
+ anchorY: options.anchorY || 0,
+ color: options.color || 0x66ff00,
+ alpha: typeof options.alpha === 'number' ? options.alpha : 1
});
return self;
});
/****
* Initialize Game
****/
-// Init Game
var game = new LK.Game({
backgroundColor: 0x000000
});
/****
* Game Code
****/
+// used for enemy hitboxes
+// bigger slash collider
/****
* Score Setup
****/
-// 1) Make the score variable
var score = 0;
-// 2) We'll store the score text container here
-var scoreTxt;
-// This function updates the visible text (shadow + main)
-// whenever the score changes:
+var scoreTxt; // container for the score text
function updateScoreDisplay() {
- // If no scoreTxt container, do nothing
if (!scoreTxt) {
return;
}
- // Attempt to find the text objects
var mainText = scoreTxt.findChildByName('main');
var shadowText = scoreTxt.findChildByName('shadow');
if (mainText && shadowText) {
- // Convert current score to string
mainText.text = String(score);
shadowText.text = String(score);
- // Optional tween effect (makes the text pulse briefly)
+ // optional "pulse"
tween(scoreTxt, {
scaleX: 1.5,
scaleY: 1.5
}, {
@@ -72,14 +66,12 @@
} else {
console.warn('⚠️ Could not find "main"/"shadow" text in scoreTxt.');
}
}
-// Call this each time you want to add to the score:
function incrementScore() {
score++;
updateScoreDisplay();
}
-// A helper to build the text container once at startup:
function createScoreText(value) {
var shadow = new Text2(String(value), {
size: 300,
fill: 0x000000,
@@ -95,45 +87,38 @@
fontFamily: "Arial"
});
main.name = "main";
main.anchor.set(0.5, 0);
- // container to hold both texts
var container = new Container();
container.name = "scoreTxt";
container.x = 1024;
container.y = 50;
- // add shadow + main text
container.addChild(shadow);
container.addChild(main);
return container;
}
-// Create the score text container once, at the start:
+// build the score text container once
scoreTxt = createScoreText(score);
scoreTxt.scaleX = 1.0;
scoreTxt.scaleY = 1.0;
-// Play background music
LK.playMusic('bgm', {
loop: true
});
-/****
-* Add Background
-****/
var bg01 = LK.getAsset('bg01', {
anchorX: 0.5,
anchorY: 0.5,
x: 1024,
y: 1366
});
game.addChild(bg01);
-// Add the score text after the background, so it's on top:
game.addChild(scoreTxt);
/****
* Petals
****/
var petals = [];
for (var i = 0; i < 50; i++) {
var petal = new Container();
- var petalSprite = petal.attachAsset('petals', {
+ petal.attachAsset('petals', {
anchorX: 0.5,
anchorY: 0.5,
rotation: Math.random() * Math.PI * 2
});
@@ -157,20 +142,18 @@
****/
var player = new Container();
var visualContainer = new Container();
visualContainer.name = 'visual';
-// Attach the 'idle' player sprite by default
var playerSprite = visualContainer.attachAsset('player_idle', {
anchorX: 0.5,
anchorY: 0.5
});
player.addChild(visualContainer);
-// Position the player
player.x = 1024;
player.y = 2732 - 250;
game.addChild(player);
/****
-* Idle animations (breathing + tilt)
+* Idle animations
****/
function startBreathingAnimation() {
tween(player, {
scaleX: 1.05,
@@ -214,24 +197,22 @@
});
}
});
}
-// Start them once at the beginning:
startBreathingAnimation();
startTiltAnimation();
-var isSequenceRunning = false;
-var isJumping = false;
-var playerState = 'idle';
-// Attack collider
+/****
+* Attack collider
+****/
var attackCol = LK.getAsset('attackcol', {
anchorX: 0.5,
anchorY: 0.5,
- alpha: 1
+ alpha: 0.75 // let’s make it partially visible for debugging
});
game.addChild(attackCol);
-attackCol.visible = false; // hidden until attacking
+attackCol.visible = false;
/****
-* Swap the player's visual sprite
+* Swap player sprite
****/
function swapPlayerVisual(newVisualId, x, y) {
var flip = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 1;
var onDone = arguments.length > 4 ? arguments[4] : undefined;
@@ -240,21 +221,17 @@
visualContainer = new Container();
visualContainer.name = 'visual';
player.addChild(visualContainer);
} else {
- // remove old sprite
visualContainer.removeChildAt(0);
}
- // attach new sprite
playerSprite = visualContainer.attachAsset(newVisualId, {
anchorX: 0.5,
anchorY: 0.5
});
visualContainer.scaleX = flip;
- // update position
player.x = x;
player.y = y;
- // special case: jump includes jump collider
if (newVisualId === 'player_jump') {
var jumpCol = LK.getAsset('jumpcol', {
anchorX: 0.5,
anchorY: 0.5,
@@ -289,10 +266,13 @@
onDone();
}
}
/****
-* Main input (touch) logic
+* Input logic
****/
+var isSequenceRunning = false;
+var isJumping = false;
+var playerState = 'idle';
game.down = function (x, y) {
if (isSequenceRunning) {
return;
}
@@ -300,9 +280,9 @@
if (y < 2732 * 2 / 3 && !isJumping) {
isJumping = true;
LK.getSound('hup').play();
swapPlayerVisual('player_jump', player.x, player.y);
- // dust particles on jump
+ // dust
for (var i = 0; i < 10; i++) {
var p = LK.getAsset('dust', {
anchorX: 0.5,
anchorY: 0.5,
@@ -333,44 +313,43 @@
duration: 300,
easing: tween.bounceOut,
onFinish: function onFinish() {
// landing dust
- for (var i = 0; i < 10; i++) {
- var p = LK.getAsset('dust', {
+ for (var j = 0; j < 10; j++) {
+ var pp = LK.getAsset('dust', {
anchorX: 0.5,
anchorY: 0.5,
x: player.x + (Math.random() * 100 - 50),
y: player.y + (Math.random() * 100 - 50)
});
- game.addChild(p);
- tween(p, {
+ game.addChild(pp);
+ tween(pp, {
alpha: 0,
- x: p.x + (Math.random() * 200 - 100),
- y: p.y + Math.random() * 200
+ x: pp.x + (Math.random() * 200 - 100),
+ y: pp.y + Math.random() * 200
}, {
duration: 500,
onFinish: function onFinish() {
- p.destroy();
+ pp.destroy();
}
});
}
isJumping = false;
swapPlayerVisual('player_idle', 1024, 2732 - 250, 1, function () {
startBreathingAnimation();
startTiltAnimation();
});
- // small "squash" effect after landing
- var visual = player.findChildByName('visual');
- if (visual) {
- var direction = visual.scaleX < 0 ? -1 : 1;
- tween(visual, {
- scaleX: direction * 1.3,
+ var v = player.findChildByName('visual');
+ if (v) {
+ var dir = v.scaleX < 0 ? -1 : 1;
+ tween(v, {
+ scaleX: dir * 1.3,
scaleY: 1.3
}, {
duration: 50,
onFinish: function onFinish() {
- tween(visual, {
- scaleX: direction * 1.0,
+ tween(v, {
+ scaleX: dir * 1.0,
scaleY: 1.0
}, {
duration: 100
});
@@ -385,12 +364,10 @@
}
// Attack if tapped in bottom 1/3
isSequenceRunning = true;
var flip = x < 1024 ? -1 : 1;
- // Attack phase 1
swapPlayerVisual('player_attackf01', 1024, 2732 - 250, flip);
LK.getSound('retroslash').play();
- // small "stretch" effect
var vis = player.findChildByName('visual');
if (vis) {
tween(vis, {
scaleX: flip * 1.3,
@@ -407,16 +384,16 @@
}
});
}
LK.setTimeout(function () {
- // Attack phase 2
swapPlayerVisual('player_attackf02', 1024, 2732 - 250, flip);
- // collider
+ // bigger/visible collider, offset so you see it overlapping
+ attackCol.width = 180;
+ attackCol.height = 180;
attackCol.x = flip === -1 ? 874 : 1174;
attackCol.y = 2732 - 250;
attackCol.scaleX = flip;
attackCol.visible = true;
- // revert to idle
LK.setTimeout(function () {
if (attackCol) {
attackCol.visible = false;
}
@@ -434,32 +411,31 @@
****/
var enemies = [];
function spawnEnemy() {
var e = new Container();
- // Attach a shape child as the "hitbox"
+ // shape child as the "hitbox"
var hitbox = new Shape({
width: 200,
height: 209,
anchorX: 0.5,
anchorY: 0.5,
color: 0x00FF00,
- // For debugging: comment out or set alpha=0 to hide
- alpha: 0
+ alpha: 0.25 // partially visible so you see EXACTLY where the slime's collision is
});
+ // Position it exactly at (0,0) so the container's (x,y)
+ // and shape's anchor alignment match
+ hitbox.x = 0;
+ hitbox.y = 0;
e.addChild(hitbox);
- // Then attach the actual sprite visually:
var gfx = e.attachAsset('enemy01', {
anchorX: 0.5,
anchorY: 0.5
});
- // Random spawn from left or right
var fromLeft = Math.random() < 0.5;
- e.x = fromLeft ? -(gfx.width / 2) : 2048 + gfx.width / 2;
+ e.x = fromLeft ? -gfx.width / 2 : 2048 + gfx.width / 2;
e.y = 2732 - 225;
e.speedX = fromLeft ? Math.random() * 4 + 2 : -(Math.random() * 4 + 2);
- // Flip sprite if from right
gfx.scaleX = fromLeft ? 1 : -1;
- // Simple bounce animation
var baseY = e.y;
function bounce() {
tween(e, {
y: baseY - 50
@@ -480,27 +456,25 @@
bounce();
enemies.push(e);
game.addChild(e);
}
-// spawn enemies on an interval
LK.setInterval(spawnEnemy, Math.random() * 1500 + 1000);
/****
-* Main update loop
+* Main update
****/
game.update = function () {
for (var i = enemies.length - 1; i >= 0; i--) {
var e = enemies[i];
e.x += e.speedX;
- // remove if offscreen
if (e.x < -300 || e.x > 2048 + 300) {
var index = enemies.indexOf(e);
if (index !== -1) {
enemies.splice(index, 1);
}
e.destroy();
continue;
}
- // check for collisions
+ // Now check collisions
if (attackCol.visible && e.intersects(attackCol)) {
handleEnemyHit(e, i);
}
}
@@ -508,18 +482,15 @@
/****
* Enemy hit logic
****/
function handleEnemyHit(enemy, index) {
- // Double-check the array
if (!enemies.includes(enemy)) {
return;
}
LK.getSound('slimedeath').play();
- // cancel bounce if any
if (enemy.bounceTween && typeof enemy.bounceTween.cancel === 'function') {
enemy.bounceTween.cancel();
}
- // Red + slight scale up
tween(enemy, {
tint: 0xFF0000
}, {
duration: 0,
@@ -529,31 +500,30 @@
scaleY: 1.3
}, {
duration: 50,
onFinish: function onFinish() {
- // shrink away + fade
tween(enemy, {
scaleX: 0.5,
scaleY: 0.5,
alpha: 0
}, {
duration: 100,
onFinish: function onFinish() {
- // remove from array if still present
- if (enemies.includes(enemy)) {
- enemies.splice(index, 1);
- enemy.destroy();
- incrementScore(); // <--- increment & update
+ var idx = enemies.indexOf(enemy);
+ if (idx !== -1) {
+ enemies.splice(idx, 1);
}
+ enemy.destroy();
+ incrementScore();
}
});
}
});
}
});
}
/****
-* "findChildByName" helper
+* findChildByName helper
****/
Container.prototype.findChildByName = function (name) {
for (var i = 0; i < this.children.length; i++) {
if (this.children[i].name === name) {
high definition super nintendo background of a japanese sakura tree forest Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows
2d snes dust particle. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows
silver coin, $ sign on it, snes art. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows
gold coin, $ sign on it, snes art. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows
snes white feather. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows
add a wooden shield
white 3d questionmark with a shadow. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows
caligraphy paper front facing flat. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows
the letters 'Ready' in 3d with a japanese cartoon cherry blossom flair. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows
add eyebrows