/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); /**** * Classes ****/ var BlossomCharacter = Container.expand(function () { var self = Container.call(this); // Create body parts var blossomBody = self.attachAsset('blossom', { anchorX: 0.5, anchorY: 0.5 }); var skirt = self.attachAsset('skirt', { anchorX: 0.5, anchorY: 0, y: 200 }); var lei = self.attachAsset('lei', { anchorX: 0.5, anchorY: 0.5, y: -150 }); var tummy = self.attachAsset('tummy', { anchorX: 0.5, anchorY: 0.5, y: 50 }); self.state = 'idle'; self.isAnimating = false; self.startIdleAnimation = function () { if (self.isAnimating) return; self.isAnimating = true; tween(skirt, { rotation: 0.1 }, { duration: 1000, easing: tween.easeInOut, onFinish: function onFinish() { tween(skirt, { rotation: -0.1 }, { duration: 1000, easing: tween.easeInOut, onFinish: function onFinish() { self.isAnimating = false; if (self.state === 'idle') { self.startIdleAnimation(); } } }); } }); }; self.playTalkAnimation = function () { self.state = 'talking'; tween.stop(skirt); tween(blossomBody, { scaleY: 1.1 }, { duration: 200, easing: tween.easeOut, onFinish: function onFinish() { tween(blossomBody, { scaleY: 1 }, { duration: 200, easing: tween.easeOut, onFinish: function onFinish() { self.state = 'idle'; self.isAnimating = false; self.startIdleAnimation(); } }); } }); }; self.playDanceAnimation = function () { self.state = 'dancing'; tween.stop(skirt); var danceCount = 0; function danceCycle() { if (danceCount < 8) { tween(skirt, { rotation: 0.3, scaleX: 1.2 }, { duration: 250, easing: tween.easeInOut, onFinish: function onFinish() { tween(skirt, { rotation: -0.3, scaleX: 0.8 }, { duration: 250, easing: tween.easeInOut, onFinish: function onFinish() { danceCount++; danceCycle(); } }); } }); } else { tween(skirt, { rotation: 0, scaleX: 1 }, { duration: 300, easing: tween.easeOut, onFinish: function onFinish() { self.state = 'idle'; self.isAnimating = false; self.startIdleAnimation(); } }); } } danceCycle(); }; self.down = function (x, y, obj) { var currentTime = Date.now(); if (!self.lastTapTime) { self.lastTapTime = currentTime; self.tapCount = 1; } else { var timeDiff = currentTime - self.lastTapTime; if (timeDiff < 500) { self.tapCount++; if (self.tapCount === 2) { // Double tap - play hula song self.playDanceAnimation(); LK.getSound('hulaSong').play(); self.createSparkles(); interactions++; scoreTxt.setText(interactions); self.tapCount = 0; } } else { self.tapCount = 1; } self.lastTapTime = currentTime; } // Handle single tap after delay if (self.tapCount === 1) { LK.setTimeout(function () { if (self.tapCount === 1) { // Single tap - play random saying var randomSaying = Math.floor(Math.random() * 7) + 1; LK.getSound('saying' + randomSaying).play(); self.playTalkAnimation(); self.createSparkles(); interactions++; scoreTxt.setText(interactions); self.tapCount = 0; } }, 500); } }; self.createSparkles = function () { for (var i = 0; i < 3; i++) { var sparkle = new Sparkle(); sparkle.x = (Math.random() - 0.5) * 200; sparkle.y = (Math.random() - 0.5) * 200; self.addChild(sparkle); sparkle.animate(); } }; return self; }); var PalmTree = Container.expand(function () { var self = Container.call(this); var trunk = self.attachAsset('palmTree', { anchorX: 0.5, anchorY: 1 }); var leaves = self.attachAsset('palmLeaves', { anchorX: 0.5, anchorY: 0.5, y: -350 }); self.animate = function () { tween(leaves, { rotation: 0.1 }, { duration: 2000, easing: tween.easeInOut, onFinish: function onFinish() { tween(leaves, { rotation: -0.1 }, { duration: 2000, easing: tween.easeInOut, onFinish: function onFinish() { self.animate(); } }); } }); }; return self; }); var Sparkle = Container.expand(function () { var self = Container.call(this); var sparkleGraphics = self.attachAsset('sparkle', { anchorX: 0.5, anchorY: 0.5, alpha: 1 }); self.animate = function () { tween(sparkleGraphics, { scaleX: 1.5, scaleY: 1.5, alpha: 0 }, { duration: 500, easing: tween.easeOut, onFinish: function onFinish() { self.destroy(); } }); }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x87CEEB }); /**** * Game Code ****/ var interactions = 0; // Create background var background = game.attachAsset('background', { anchorX: 0, anchorY: 0, x: 0, y: 0 }); // Create palm trees var leftPalmTree = game.addChild(new PalmTree()); leftPalmTree.x = 300; leftPalmTree.y = 2200; leftPalmTree.animate(); var rightPalmTree = game.addChild(new PalmTree()); rightPalmTree.x = 1748; rightPalmTree.y = 2200; rightPalmTree.animate(); // Create Blossom character var blossom = game.addChild(new BlossomCharacter()); blossom.x = 1024; blossom.y = 1366; blossom.startIdleAnimation(); // Create score display var scoreTxt = new Text2('Interactions: 0', { size: 80, fill: 0xFFFFFF }); scoreTxt.anchor.set(0.5, 0); LK.gui.top.addChild(scoreTxt); // Instructions text var instructionTxt = new Text2('Tap Blossom\'s tummy!\nDouble tap for hula song!', { size: 60, fill: 0xFFFFFF }); instructionTxt.anchor.set(0.5, 1); LK.gui.bottom.addChild(instructionTxt); game.update = function () { // Game loop - animations are handled by tween system };
===================================================================
--- original.js
+++ change.js
@@ -1,6 +1,276 @@
-/****
+/****
+* Plugins
+****/
+var tween = LK.import("@upit/tween.v1");
+
+/****
+* Classes
+****/
+var BlossomCharacter = Container.expand(function () {
+ var self = Container.call(this);
+ // Create body parts
+ var blossomBody = self.attachAsset('blossom', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ var skirt = self.attachAsset('skirt', {
+ anchorX: 0.5,
+ anchorY: 0,
+ y: 200
+ });
+ var lei = self.attachAsset('lei', {
+ anchorX: 0.5,
+ anchorY: 0.5,
+ y: -150
+ });
+ var tummy = self.attachAsset('tummy', {
+ anchorX: 0.5,
+ anchorY: 0.5,
+ y: 50
+ });
+ self.state = 'idle';
+ self.isAnimating = false;
+ self.startIdleAnimation = function () {
+ if (self.isAnimating) return;
+ self.isAnimating = true;
+ tween(skirt, {
+ rotation: 0.1
+ }, {
+ duration: 1000,
+ easing: tween.easeInOut,
+ onFinish: function onFinish() {
+ tween(skirt, {
+ rotation: -0.1
+ }, {
+ duration: 1000,
+ easing: tween.easeInOut,
+ onFinish: function onFinish() {
+ self.isAnimating = false;
+ if (self.state === 'idle') {
+ self.startIdleAnimation();
+ }
+ }
+ });
+ }
+ });
+ };
+ self.playTalkAnimation = function () {
+ self.state = 'talking';
+ tween.stop(skirt);
+ tween(blossomBody, {
+ scaleY: 1.1
+ }, {
+ duration: 200,
+ easing: tween.easeOut,
+ onFinish: function onFinish() {
+ tween(blossomBody, {
+ scaleY: 1
+ }, {
+ duration: 200,
+ easing: tween.easeOut,
+ onFinish: function onFinish() {
+ self.state = 'idle';
+ self.isAnimating = false;
+ self.startIdleAnimation();
+ }
+ });
+ }
+ });
+ };
+ self.playDanceAnimation = function () {
+ self.state = 'dancing';
+ tween.stop(skirt);
+ var danceCount = 0;
+ function danceCycle() {
+ if (danceCount < 8) {
+ tween(skirt, {
+ rotation: 0.3,
+ scaleX: 1.2
+ }, {
+ duration: 250,
+ easing: tween.easeInOut,
+ onFinish: function onFinish() {
+ tween(skirt, {
+ rotation: -0.3,
+ scaleX: 0.8
+ }, {
+ duration: 250,
+ easing: tween.easeInOut,
+ onFinish: function onFinish() {
+ danceCount++;
+ danceCycle();
+ }
+ });
+ }
+ });
+ } else {
+ tween(skirt, {
+ rotation: 0,
+ scaleX: 1
+ }, {
+ duration: 300,
+ easing: tween.easeOut,
+ onFinish: function onFinish() {
+ self.state = 'idle';
+ self.isAnimating = false;
+ self.startIdleAnimation();
+ }
+ });
+ }
+ }
+ danceCycle();
+ };
+ self.down = function (x, y, obj) {
+ var currentTime = Date.now();
+ if (!self.lastTapTime) {
+ self.lastTapTime = currentTime;
+ self.tapCount = 1;
+ } else {
+ var timeDiff = currentTime - self.lastTapTime;
+ if (timeDiff < 500) {
+ self.tapCount++;
+ if (self.tapCount === 2) {
+ // Double tap - play hula song
+ self.playDanceAnimation();
+ LK.getSound('hulaSong').play();
+ self.createSparkles();
+ interactions++;
+ scoreTxt.setText(interactions);
+ self.tapCount = 0;
+ }
+ } else {
+ self.tapCount = 1;
+ }
+ self.lastTapTime = currentTime;
+ }
+ // Handle single tap after delay
+ if (self.tapCount === 1) {
+ LK.setTimeout(function () {
+ if (self.tapCount === 1) {
+ // Single tap - play random saying
+ var randomSaying = Math.floor(Math.random() * 7) + 1;
+ LK.getSound('saying' + randomSaying).play();
+ self.playTalkAnimation();
+ self.createSparkles();
+ interactions++;
+ scoreTxt.setText(interactions);
+ self.tapCount = 0;
+ }
+ }, 500);
+ }
+ };
+ self.createSparkles = function () {
+ for (var i = 0; i < 3; i++) {
+ var sparkle = new Sparkle();
+ sparkle.x = (Math.random() - 0.5) * 200;
+ sparkle.y = (Math.random() - 0.5) * 200;
+ self.addChild(sparkle);
+ sparkle.animate();
+ }
+ };
+ return self;
+});
+var PalmTree = Container.expand(function () {
+ var self = Container.call(this);
+ var trunk = self.attachAsset('palmTree', {
+ anchorX: 0.5,
+ anchorY: 1
+ });
+ var leaves = self.attachAsset('palmLeaves', {
+ anchorX: 0.5,
+ anchorY: 0.5,
+ y: -350
+ });
+ self.animate = function () {
+ tween(leaves, {
+ rotation: 0.1
+ }, {
+ duration: 2000,
+ easing: tween.easeInOut,
+ onFinish: function onFinish() {
+ tween(leaves, {
+ rotation: -0.1
+ }, {
+ duration: 2000,
+ easing: tween.easeInOut,
+ onFinish: function onFinish() {
+ self.animate();
+ }
+ });
+ }
+ });
+ };
+ return self;
+});
+var Sparkle = Container.expand(function () {
+ var self = Container.call(this);
+ var sparkleGraphics = self.attachAsset('sparkle', {
+ anchorX: 0.5,
+ anchorY: 0.5,
+ alpha: 1
+ });
+ self.animate = function () {
+ tween(sparkleGraphics, {
+ scaleX: 1.5,
+ scaleY: 1.5,
+ alpha: 0
+ }, {
+ duration: 500,
+ easing: tween.easeOut,
+ onFinish: function onFinish() {
+ self.destroy();
+ }
+ });
+ };
+ return self;
+});
+
+/****
* Initialize Game
-****/
+****/
var game = new LK.Game({
- backgroundColor: 0x000000
-});
\ No newline at end of file
+ backgroundColor: 0x87CEEB
+});
+
+/****
+* Game Code
+****/
+var interactions = 0;
+// Create background
+var background = game.attachAsset('background', {
+ anchorX: 0,
+ anchorY: 0,
+ x: 0,
+ y: 0
+});
+// Create palm trees
+var leftPalmTree = game.addChild(new PalmTree());
+leftPalmTree.x = 300;
+leftPalmTree.y = 2200;
+leftPalmTree.animate();
+var rightPalmTree = game.addChild(new PalmTree());
+rightPalmTree.x = 1748;
+rightPalmTree.y = 2200;
+rightPalmTree.animate();
+// Create Blossom character
+var blossom = game.addChild(new BlossomCharacter());
+blossom.x = 1024;
+blossom.y = 1366;
+blossom.startIdleAnimation();
+// Create score display
+var scoreTxt = new Text2('Interactions: 0', {
+ size: 80,
+ fill: 0xFFFFFF
+});
+scoreTxt.anchor.set(0.5, 0);
+LK.gui.top.addChild(scoreTxt);
+// Instructions text
+var instructionTxt = new Text2('Tap Blossom\'s tummy!\nDouble tap for hula song!', {
+ size: 60,
+ fill: 0xFFFFFF
+});
+instructionTxt.anchor.set(0.5, 1);
+LK.gui.bottom.addChild(instructionTxt);
+game.update = function () {
+ // Game loop - animations are handled by tween system
+};
\ No newline at end of file