/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); /**** * Classes ****/ var Button = Container.expand(function (text, assetType) { var self = Container.call(this); var buttonGraphics = self.attachAsset(assetType, { anchorX: 0.5, anchorY: 0.5 }); var buttonText = new Text2(text, { size: 30, fill: 0xFFFFFF }); buttonText.anchor.set(0.5, 0.5); self.addChild(buttonText); self.down = function (x, y, obj) { LK.getSound('select').play(); tween(buttonGraphics, { scaleX: 0.95, scaleY: 0.95 }, { duration: 100, easing: tween.easeOut, onFinish: function onFinish() { tween(buttonGraphics, { scaleX: 1.0, scaleY: 1.0 }, { duration: 100, easing: tween.easeIn }); } }); if (text === 'Back') { switchToSelectionMode(); } }; return self; }); var Character = Container.expand(function (characterType) { var self = Container.call(this); self.characterType = characterType; self.isAnimating = false; var characterGraphics = self.attachAsset(characterType, { anchorX: 0.5, anchorY: 0.5 }); // Character name text var nameText = new Text2(characterType.charAt(0).toUpperCase() + characterType.slice(1), { size: 60, fill: 0xFFFFFF }); nameText.anchor.set(0.5, 0.5); nameText.y = 250; self.addChild(nameText); self.animateSelection = function () { if (self.isAnimating) return; self.isAnimating = true; tween(characterGraphics, { scaleX: 1.2, scaleY: 1.2 }, { duration: 200, easing: tween.easeOut, onFinish: function onFinish() { tween(characterGraphics, { scaleX: 1.0, scaleY: 1.0 }, { duration: 200, easing: tween.easeIn, onFinish: function onFinish() { self.isAnimating = false; } }); } }); }; self.down = function (x, y, obj) { if (gameState === 'selection') { LK.getSound('select').play(); self.animateSelection(); selectedCharacter = self.characterType; LK.setTimeout(function () { switchToGameMode(); }, 400); } else if (gameState === 'playing' && self.characterType === selectedCharacter) { performHulaHoopTrick(); } }; return self; }); var HulaHoop = Container.expand(function () { var self = Container.call(this); self.momentum = 1.0; self.rotationSpeed = 0.1; self.isActive = false; var hoopGraphics = self.attachAsset('hulaHoop', { anchorX: 0.5, anchorY: 0.5 }); self.update = function () { if (self.isActive) { hoopGraphics.rotation += self.rotationSpeed * self.momentum; // Gradually decrease momentum self.momentum *= 0.995; // Update rotation speed based on momentum self.rotationSpeed = 0.05 + self.momentum * 0.15; // Check if momentum is too low if (self.momentum < 0.3) { self.momentum = 0.3; // Slow down the hoop when momentum is low self.rotationSpeed = 0.02; } } }; self.boost = function () { self.momentum = Math.min(self.momentum + 0.4, 2.0); // Visual effect for boost tween(hoopGraphics, { scaleX: 1.1, scaleY: 1.1 }, { duration: 100, easing: tween.easeOut, onFinish: function onFinish() { tween(hoopGraphics, { scaleX: 1.0, scaleY: 1.0 }, { duration: 100, easing: tween.easeIn }); } }); }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x2e2e2e }); /**** * Game Code ****/ var gameState = 'selection'; // 'selection' or 'playing' var selectedCharacter = null; var characters = []; var gameCharacter = null; var hulaHoop = null; var backButton = null; var scoreTxt = null; var comboCount = 0; var lastTapTime = 0; // Create title text var titleText = new Text2('Hula Hoop Stars', { size: 120, fill: 0xFFFFFF }); titleText.anchor.set(0.5, 0.5); titleText.x = 2048 / 2; titleText.y = 400; game.addChild(titleText); // Create subtitle text var subtitleText = new Text2('Choose Your Character', { size: 60, fill: 0xCCCCCC }); subtitleText.anchor.set(0.5, 0.5); subtitleText.x = 2048 / 2; subtitleText.y = 550; game.addChild(subtitleText); // Create characters for selection var characterTypes = ['blossom', 'buttercup', 'bliss']; var characterPositions = [{ x: 2048 / 2 - 400, y: 1200 }, { x: 2048 / 2, y: 1200 }, { x: 2048 / 2 + 400, y: 1200 }]; for (var i = 0; i < characterTypes.length; i++) { var character = new Character(characterTypes[i]); character.x = characterPositions[i].x; character.y = characterPositions[i].y; characters.push(character); game.addChild(character); } // Create score display scoreTxt = new Text2('Score: 0', { size: 80, fill: 0xFFFFFF }); scoreTxt.anchor.set(0.5, 0); scoreTxt.visible = false; LK.gui.top.addChild(scoreTxt); function switchToGameMode() { gameState = 'playing'; // Hide selection elements titleText.visible = false; subtitleText.visible = false; for (var i = 0; i < characters.length; i++) { characters[i].visible = false; } // Create game character gameCharacter = new Character(selectedCharacter); gameCharacter.x = 2048 / 2; gameCharacter.y = 1400; game.addChild(gameCharacter); // Create hula hoop hulaHoop = new HulaHoop(); hulaHoop.x = 2048 / 2; hulaHoop.y = 1400; hulaHoop.isActive = true; game.addChild(hulaHoop); // Create back button backButton = new Button('Back', 'backButton'); backButton.x = 150; backButton.y = 100; game.addChild(backButton); // Show score scoreTxt.visible = true; scoreTxt.setText('Score: ' + LK.getScore()); // Reset game variables comboCount = 0; lastTapTime = 0; } function switchToSelectionMode() { gameState = 'selection'; // Show selection elements titleText.visible = true; subtitleText.visible = true; for (var i = 0; i < characters.length; i++) { characters[i].visible = true; } // Hide/destroy game elements if (gameCharacter) { gameCharacter.destroy(); gameCharacter = null; } if (hulaHoop) { hulaHoop.destroy(); hulaHoop = null; } if (backButton) { backButton.destroy(); backButton = null; } // Hide score scoreTxt.visible = false; selectedCharacter = null; } function performHulaHoopTrick() { var currentTime = LK.ticks; var timeSinceLastTap = currentTime - lastTapTime; // Check for combo timing (within 30-90 ticks for good timing) if (timeSinceLastTap >= 30 && timeSinceLastTap <= 90) { comboCount++; LK.getSound('success').play(); // Bonus points for combos var points = 10 + comboCount * 5; LK.setScore(LK.getScore() + points); } else { comboCount = 0; LK.getSound('whoosh').play(); LK.setScore(LK.getScore() + 5); } lastTapTime = currentTime; // Boost hula hoop momentum if (hulaHoop) { hulaHoop.boost(); } // Update score display scoreTxt.setText('Score: ' + LK.getScore()); // Character animation if (gameCharacter) { var characterGraphics = gameCharacter.children[0]; tween(characterGraphics, { scaleX: 1.1, scaleY: 0.9 }, { duration: 150, easing: tween.easeOut, onFinish: function onFinish() { tween(characterGraphics, { scaleX: 1.0, scaleY: 1.0 }, { duration: 150, easing: tween.easeIn }); } }); } } game.update = function () { if (gameState === 'playing' && hulaHoop) { // Check if hula hoop momentum is too low for too long if (hulaHoop.momentum <= 0.3) { // Game gets harder over time - if player doesn't tap, they lose var timeSinceLastTap = LK.ticks - lastTapTime; if (timeSinceLastTap > 180) { // 3 seconds at 60fps LK.showGameOver(); } } } };
===================================================================
--- original.js
+++ change.js
@@ -1,6 +1,320 @@
-/****
+/****
+* Plugins
+****/
+var tween = LK.import("@upit/tween.v1");
+
+/****
+* Classes
+****/
+var Button = Container.expand(function (text, assetType) {
+ var self = Container.call(this);
+ var buttonGraphics = self.attachAsset(assetType, {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ var buttonText = new Text2(text, {
+ size: 30,
+ fill: 0xFFFFFF
+ });
+ buttonText.anchor.set(0.5, 0.5);
+ self.addChild(buttonText);
+ self.down = function (x, y, obj) {
+ LK.getSound('select').play();
+ tween(buttonGraphics, {
+ scaleX: 0.95,
+ scaleY: 0.95
+ }, {
+ duration: 100,
+ easing: tween.easeOut,
+ onFinish: function onFinish() {
+ tween(buttonGraphics, {
+ scaleX: 1.0,
+ scaleY: 1.0
+ }, {
+ duration: 100,
+ easing: tween.easeIn
+ });
+ }
+ });
+ if (text === 'Back') {
+ switchToSelectionMode();
+ }
+ };
+ return self;
+});
+var Character = Container.expand(function (characterType) {
+ var self = Container.call(this);
+ self.characterType = characterType;
+ self.isAnimating = false;
+ var characterGraphics = self.attachAsset(characterType, {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ // Character name text
+ var nameText = new Text2(characterType.charAt(0).toUpperCase() + characterType.slice(1), {
+ size: 60,
+ fill: 0xFFFFFF
+ });
+ nameText.anchor.set(0.5, 0.5);
+ nameText.y = 250;
+ self.addChild(nameText);
+ self.animateSelection = function () {
+ if (self.isAnimating) return;
+ self.isAnimating = true;
+ tween(characterGraphics, {
+ scaleX: 1.2,
+ scaleY: 1.2
+ }, {
+ duration: 200,
+ easing: tween.easeOut,
+ onFinish: function onFinish() {
+ tween(characterGraphics, {
+ scaleX: 1.0,
+ scaleY: 1.0
+ }, {
+ duration: 200,
+ easing: tween.easeIn,
+ onFinish: function onFinish() {
+ self.isAnimating = false;
+ }
+ });
+ }
+ });
+ };
+ self.down = function (x, y, obj) {
+ if (gameState === 'selection') {
+ LK.getSound('select').play();
+ self.animateSelection();
+ selectedCharacter = self.characterType;
+ LK.setTimeout(function () {
+ switchToGameMode();
+ }, 400);
+ } else if (gameState === 'playing' && self.characterType === selectedCharacter) {
+ performHulaHoopTrick();
+ }
+ };
+ return self;
+});
+var HulaHoop = Container.expand(function () {
+ var self = Container.call(this);
+ self.momentum = 1.0;
+ self.rotationSpeed = 0.1;
+ self.isActive = false;
+ var hoopGraphics = self.attachAsset('hulaHoop', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.update = function () {
+ if (self.isActive) {
+ hoopGraphics.rotation += self.rotationSpeed * self.momentum;
+ // Gradually decrease momentum
+ self.momentum *= 0.995;
+ // Update rotation speed based on momentum
+ self.rotationSpeed = 0.05 + self.momentum * 0.15;
+ // Check if momentum is too low
+ if (self.momentum < 0.3) {
+ self.momentum = 0.3;
+ // Slow down the hoop when momentum is low
+ self.rotationSpeed = 0.02;
+ }
+ }
+ };
+ self.boost = function () {
+ self.momentum = Math.min(self.momentum + 0.4, 2.0);
+ // Visual effect for boost
+ tween(hoopGraphics, {
+ scaleX: 1.1,
+ scaleY: 1.1
+ }, {
+ duration: 100,
+ easing: tween.easeOut,
+ onFinish: function onFinish() {
+ tween(hoopGraphics, {
+ scaleX: 1.0,
+ scaleY: 1.0
+ }, {
+ duration: 100,
+ easing: tween.easeIn
+ });
+ }
+ });
+ };
+ return self;
+});
+
+/****
* Initialize Game
-****/
+****/
var game = new LK.Game({
- backgroundColor: 0x000000
-});
\ No newline at end of file
+ backgroundColor: 0x2e2e2e
+});
+
+/****
+* Game Code
+****/
+var gameState = 'selection'; // 'selection' or 'playing'
+var selectedCharacter = null;
+var characters = [];
+var gameCharacter = null;
+var hulaHoop = null;
+var backButton = null;
+var scoreTxt = null;
+var comboCount = 0;
+var lastTapTime = 0;
+// Create title text
+var titleText = new Text2('Hula Hoop Stars', {
+ size: 120,
+ fill: 0xFFFFFF
+});
+titleText.anchor.set(0.5, 0.5);
+titleText.x = 2048 / 2;
+titleText.y = 400;
+game.addChild(titleText);
+// Create subtitle text
+var subtitleText = new Text2('Choose Your Character', {
+ size: 60,
+ fill: 0xCCCCCC
+});
+subtitleText.anchor.set(0.5, 0.5);
+subtitleText.x = 2048 / 2;
+subtitleText.y = 550;
+game.addChild(subtitleText);
+// Create characters for selection
+var characterTypes = ['blossom', 'buttercup', 'bliss'];
+var characterPositions = [{
+ x: 2048 / 2 - 400,
+ y: 1200
+}, {
+ x: 2048 / 2,
+ y: 1200
+}, {
+ x: 2048 / 2 + 400,
+ y: 1200
+}];
+for (var i = 0; i < characterTypes.length; i++) {
+ var character = new Character(characterTypes[i]);
+ character.x = characterPositions[i].x;
+ character.y = characterPositions[i].y;
+ characters.push(character);
+ game.addChild(character);
+}
+// Create score display
+scoreTxt = new Text2('Score: 0', {
+ size: 80,
+ fill: 0xFFFFFF
+});
+scoreTxt.anchor.set(0.5, 0);
+scoreTxt.visible = false;
+LK.gui.top.addChild(scoreTxt);
+function switchToGameMode() {
+ gameState = 'playing';
+ // Hide selection elements
+ titleText.visible = false;
+ subtitleText.visible = false;
+ for (var i = 0; i < characters.length; i++) {
+ characters[i].visible = false;
+ }
+ // Create game character
+ gameCharacter = new Character(selectedCharacter);
+ gameCharacter.x = 2048 / 2;
+ gameCharacter.y = 1400;
+ game.addChild(gameCharacter);
+ // Create hula hoop
+ hulaHoop = new HulaHoop();
+ hulaHoop.x = 2048 / 2;
+ hulaHoop.y = 1400;
+ hulaHoop.isActive = true;
+ game.addChild(hulaHoop);
+ // Create back button
+ backButton = new Button('Back', 'backButton');
+ backButton.x = 150;
+ backButton.y = 100;
+ game.addChild(backButton);
+ // Show score
+ scoreTxt.visible = true;
+ scoreTxt.setText('Score: ' + LK.getScore());
+ // Reset game variables
+ comboCount = 0;
+ lastTapTime = 0;
+}
+function switchToSelectionMode() {
+ gameState = 'selection';
+ // Show selection elements
+ titleText.visible = true;
+ subtitleText.visible = true;
+ for (var i = 0; i < characters.length; i++) {
+ characters[i].visible = true;
+ }
+ // Hide/destroy game elements
+ if (gameCharacter) {
+ gameCharacter.destroy();
+ gameCharacter = null;
+ }
+ if (hulaHoop) {
+ hulaHoop.destroy();
+ hulaHoop = null;
+ }
+ if (backButton) {
+ backButton.destroy();
+ backButton = null;
+ }
+ // Hide score
+ scoreTxt.visible = false;
+ selectedCharacter = null;
+}
+function performHulaHoopTrick() {
+ var currentTime = LK.ticks;
+ var timeSinceLastTap = currentTime - lastTapTime;
+ // Check for combo timing (within 30-90 ticks for good timing)
+ if (timeSinceLastTap >= 30 && timeSinceLastTap <= 90) {
+ comboCount++;
+ LK.getSound('success').play();
+ // Bonus points for combos
+ var points = 10 + comboCount * 5;
+ LK.setScore(LK.getScore() + points);
+ } else {
+ comboCount = 0;
+ LK.getSound('whoosh').play();
+ LK.setScore(LK.getScore() + 5);
+ }
+ lastTapTime = currentTime;
+ // Boost hula hoop momentum
+ if (hulaHoop) {
+ hulaHoop.boost();
+ }
+ // Update score display
+ scoreTxt.setText('Score: ' + LK.getScore());
+ // Character animation
+ if (gameCharacter) {
+ var characterGraphics = gameCharacter.children[0];
+ tween(characterGraphics, {
+ scaleX: 1.1,
+ scaleY: 0.9
+ }, {
+ duration: 150,
+ easing: tween.easeOut,
+ onFinish: function onFinish() {
+ tween(characterGraphics, {
+ scaleX: 1.0,
+ scaleY: 1.0
+ }, {
+ duration: 150,
+ easing: tween.easeIn
+ });
+ }
+ });
+ }
+}
+game.update = function () {
+ if (gameState === 'playing' && hulaHoop) {
+ // Check if hula hoop momentum is too low for too long
+ if (hulaHoop.momentum <= 0.3) {
+ // Game gets harder over time - if player doesn't tap, they lose
+ var timeSinceLastTap = LK.ticks - lastTapTime;
+ if (timeSinceLastTap > 180) {
+ // 3 seconds at 60fps
+ LK.showGameOver();
+ }
+ }
+ }
+};
\ No newline at end of file