Code edit (1 edits merged)
Please save this source code
User prompt
Nursery Rhyme Sing-Along
Initial prompt
Toca nursery rhymes (2017). Tap on ginger 🐱 or Harvey 🐶 to make it sing Mary had a little lamb, little bo peep, hey diddle diddle, Robin Hood, ring around the Rosie, or grand old Duke of York, press the chalkboard to make it draw the notes
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); /**** * Classes ****/ var Character = Container.expand(function (characterType) { var self = Container.call(this); var body = self.attachAsset(characterType, { anchorX: 0.5, anchorY: 0.5 }); var leftEye = self.attachAsset(characterType + 'Eyes', { anchorX: 0.5, anchorY: 0.5, x: -60, y: -80 }); var rightEye = self.attachAsset(characterType + 'Eyes', { anchorX: 0.5, anchorY: 0.5, x: 60, y: -80 }); var mouth = self.attachAsset('mouth', { anchorX: 0.5, anchorY: 0.5, x: 0, y: 40, scaleY: 0.5 }); self.isSinging = false; self.originalScale = 1; self.startSinging = function () { self.isSinging = true; tween(self, { scaleX: 1.1, scaleY: 1.1 }, { duration: 200, easing: tween.easeOut }); tween(mouth, { scaleY: 1 }, { duration: 150 }); }; self.stopSinging = function () { self.isSinging = false; tween(self, { scaleX: 1, scaleY: 1 }, { duration: 300, easing: tween.easeOut }); tween(mouth, { scaleY: 0.5 }, { duration: 200 }); }; self.down = function (x, y, obj) { if (!currentlyPlaying) { LK.getSound('tapSound').play(); startNurseryRhyme(characterType); } }; return self; }); var MusicalNote = Container.expand(function () { var self = Container.call(this); var note = self.attachAsset('musicalNote', { anchorX: 0.5, anchorY: 0.5 }); self.speed = -2; self.life = 300; self.maxLife = 300; self.update = function () { self.y += self.speed; self.life--; var alpha = self.life / self.maxLife; note.alpha = alpha; if (self.life <= 0) { self.destroy(); for (var i = musicalNotes.length - 1; i >= 0; i--) { if (musicalNotes[i] === self) { musicalNotes.splice(i, 1); break; } } } }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x87CEEB }); /**** * Game Code ****/ var nurseryRhymes = ['maryHadALittleLamb', 'littleBoBeep', 'heyDiddleDiddle', 'robinHood', 'ringAroundTheRosie', 'grandOldDukeOfYork']; var nurseryRhymeNames = ['Mary Had a Little Lamb', 'Little Bo Peep', 'Hey Diddle Diddle', 'Robin Hood', 'Ring Around the Rosie', 'Grand Old Duke of York']; var currentRhymeIndex = 0; var currentlyPlaying = false; var musicalNotes = []; var noteSpawnTimer = 0; // Create chalkboard var chalkboard = game.addChild(LK.getAsset('chalkboard', { anchorX: 0.5, anchorY: 0.5, x: 1024, y: 800 })); // Create characters var ginger = game.addChild(new Character('ginger')); ginger.x = 600; ginger.y = 1400; var harvey = game.addChild(new Character('harvey')); harvey.x = 1400; harvey.y = 1400; // Create title text var titleText = new Text2('Nursery Rhyme Sing-Along', { size: 80, fill: 0xFFFFFF }); titleText.anchor.set(0.5, 0); LK.gui.top.addChild(titleText); titleText.y = 120; // Create current song text var currentSongText = new Text2('Tap Ginger or Harvey to sing!', { size: 60, fill: 0xFFFFFF }); currentSongText.anchor.set(0.5, 1); LK.gui.bottom.addChild(currentSongText); currentSongText.y = -50; function startNurseryRhyme(character) { if (currentlyPlaying) return; currentlyPlaying = true; var rhymeId = nurseryRhymes[currentRhymeIndex]; var rhymeName = nurseryRhymeNames[currentRhymeIndex]; currentSongText.setText('Now Playing: ' + rhymeName); if (character === 'ginger') { ginger.startSinging(); harvey.stopSinging(); } else { harvey.startSinging(); ginger.stopSinging(); } LK.playMusic(rhymeId, { loop: false }); // Stop music and singing after song duration (assuming 30 seconds max) LK.setTimeout(function () { stopCurrentSong(); currentRhymeIndex = (currentRhymeIndex + 1) % nurseryRhymes.length; }, 30000); } function stopCurrentSong() { currentlyPlaying = false; ginger.stopSinging(); harvey.stopSinging(); currentSongText.setText('Tap Ginger or Harvey to sing!'); LK.stopMusic(); } function spawnMusicalNote() { if (!currentlyPlaying) return; var note = new MusicalNote(); note.x = Math.random() * 1400 + 300; note.y = chalkboard.y + 400; var randomScale = 0.8 + Math.random() * 0.6; note.scaleX = randomScale; note.scaleY = randomScale; musicalNotes.push(note); game.addChild(note); } game.update = function () { // Spawn musical notes while playing if (currentlyPlaying) { noteSpawnTimer++; if (noteSpawnTimer >= 20) { spawnMusicalNote(); noteSpawnTimer = 0; } } // Clean up destroyed notes for (var i = musicalNotes.length - 1; i >= 0; i--) { var note = musicalNotes[i]; if (!note.parent) { musicalNotes.splice(i, 1); } } };
===================================================================
--- original.js
+++ change.js
@@ -1,6 +1,203 @@
-/****
+/****
+* Plugins
+****/
+var tween = LK.import("@upit/tween.v1");
+
+/****
+* Classes
+****/
+var Character = Container.expand(function (characterType) {
+ var self = Container.call(this);
+ var body = self.attachAsset(characterType, {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ var leftEye = self.attachAsset(characterType + 'Eyes', {
+ anchorX: 0.5,
+ anchorY: 0.5,
+ x: -60,
+ y: -80
+ });
+ var rightEye = self.attachAsset(characterType + 'Eyes', {
+ anchorX: 0.5,
+ anchorY: 0.5,
+ x: 60,
+ y: -80
+ });
+ var mouth = self.attachAsset('mouth', {
+ anchorX: 0.5,
+ anchorY: 0.5,
+ x: 0,
+ y: 40,
+ scaleY: 0.5
+ });
+ self.isSinging = false;
+ self.originalScale = 1;
+ self.startSinging = function () {
+ self.isSinging = true;
+ tween(self, {
+ scaleX: 1.1,
+ scaleY: 1.1
+ }, {
+ duration: 200,
+ easing: tween.easeOut
+ });
+ tween(mouth, {
+ scaleY: 1
+ }, {
+ duration: 150
+ });
+ };
+ self.stopSinging = function () {
+ self.isSinging = false;
+ tween(self, {
+ scaleX: 1,
+ scaleY: 1
+ }, {
+ duration: 300,
+ easing: tween.easeOut
+ });
+ tween(mouth, {
+ scaleY: 0.5
+ }, {
+ duration: 200
+ });
+ };
+ self.down = function (x, y, obj) {
+ if (!currentlyPlaying) {
+ LK.getSound('tapSound').play();
+ startNurseryRhyme(characterType);
+ }
+ };
+ return self;
+});
+var MusicalNote = Container.expand(function () {
+ var self = Container.call(this);
+ var note = self.attachAsset('musicalNote', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.speed = -2;
+ self.life = 300;
+ self.maxLife = 300;
+ self.update = function () {
+ self.y += self.speed;
+ self.life--;
+ var alpha = self.life / self.maxLife;
+ note.alpha = alpha;
+ if (self.life <= 0) {
+ self.destroy();
+ for (var i = musicalNotes.length - 1; i >= 0; i--) {
+ if (musicalNotes[i] === self) {
+ musicalNotes.splice(i, 1);
+ break;
+ }
+ }
+ }
+ };
+ return self;
+});
+
+/****
* Initialize Game
-****/
+****/
var game = new LK.Game({
- backgroundColor: 0x000000
-});
\ No newline at end of file
+ backgroundColor: 0x87CEEB
+});
+
+/****
+* Game Code
+****/
+var nurseryRhymes = ['maryHadALittleLamb', 'littleBoBeep', 'heyDiddleDiddle', 'robinHood', 'ringAroundTheRosie', 'grandOldDukeOfYork'];
+var nurseryRhymeNames = ['Mary Had a Little Lamb', 'Little Bo Peep', 'Hey Diddle Diddle', 'Robin Hood', 'Ring Around the Rosie', 'Grand Old Duke of York'];
+var currentRhymeIndex = 0;
+var currentlyPlaying = false;
+var musicalNotes = [];
+var noteSpawnTimer = 0;
+// Create chalkboard
+var chalkboard = game.addChild(LK.getAsset('chalkboard', {
+ anchorX: 0.5,
+ anchorY: 0.5,
+ x: 1024,
+ y: 800
+}));
+// Create characters
+var ginger = game.addChild(new Character('ginger'));
+ginger.x = 600;
+ginger.y = 1400;
+var harvey = game.addChild(new Character('harvey'));
+harvey.x = 1400;
+harvey.y = 1400;
+// Create title text
+var titleText = new Text2('Nursery Rhyme Sing-Along', {
+ size: 80,
+ fill: 0xFFFFFF
+});
+titleText.anchor.set(0.5, 0);
+LK.gui.top.addChild(titleText);
+titleText.y = 120;
+// Create current song text
+var currentSongText = new Text2('Tap Ginger or Harvey to sing!', {
+ size: 60,
+ fill: 0xFFFFFF
+});
+currentSongText.anchor.set(0.5, 1);
+LK.gui.bottom.addChild(currentSongText);
+currentSongText.y = -50;
+function startNurseryRhyme(character) {
+ if (currentlyPlaying) return;
+ currentlyPlaying = true;
+ var rhymeId = nurseryRhymes[currentRhymeIndex];
+ var rhymeName = nurseryRhymeNames[currentRhymeIndex];
+ currentSongText.setText('Now Playing: ' + rhymeName);
+ if (character === 'ginger') {
+ ginger.startSinging();
+ harvey.stopSinging();
+ } else {
+ harvey.startSinging();
+ ginger.stopSinging();
+ }
+ LK.playMusic(rhymeId, {
+ loop: false
+ });
+ // Stop music and singing after song duration (assuming 30 seconds max)
+ LK.setTimeout(function () {
+ stopCurrentSong();
+ currentRhymeIndex = (currentRhymeIndex + 1) % nurseryRhymes.length;
+ }, 30000);
+}
+function stopCurrentSong() {
+ currentlyPlaying = false;
+ ginger.stopSinging();
+ harvey.stopSinging();
+ currentSongText.setText('Tap Ginger or Harvey to sing!');
+ LK.stopMusic();
+}
+function spawnMusicalNote() {
+ if (!currentlyPlaying) return;
+ var note = new MusicalNote();
+ note.x = Math.random() * 1400 + 300;
+ note.y = chalkboard.y + 400;
+ var randomScale = 0.8 + Math.random() * 0.6;
+ note.scaleX = randomScale;
+ note.scaleY = randomScale;
+ musicalNotes.push(note);
+ game.addChild(note);
+}
+game.update = function () {
+ // Spawn musical notes while playing
+ if (currentlyPlaying) {
+ noteSpawnTimer++;
+ if (noteSpawnTimer >= 20) {
+ spawnMusicalNote();
+ noteSpawnTimer = 0;
+ }
+ }
+ // Clean up destroyed notes
+ for (var i = musicalNotes.length - 1; i >= 0; i--) {
+ var note = musicalNotes[i];
+ if (!note.parent) {
+ musicalNotes.splice(i, 1);
+ }
+ }
+};
\ No newline at end of file