/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); /**** * Classes ****/ var BalletScene = Container.expand(function () { var self = Container.call(this); var stage = self.attachAsset('stage', { anchorX: 0.5, anchorY: 1.0, y: 100 }); var leftCurtain = self.attachAsset('curtain', { anchorX: 1.0, anchorY: 0.5, x: -50 }); var rightCurtain = self.attachAsset('curtain', { anchorX: 0.0, anchorY: 0.5, x: 50 }); var dancers = []; for (var i = 0; i < 5; i++) { var dancer = self.attachAsset('dancer', { anchorX: 0.5, anchorY: 1.0, x: (i - 2) * 100, y: 50 }); dancers.push(dancer); } self.animate = function () { tween(leftCurtain, { x: -400 }, { duration: 1000, easing: tween.easeOut }); tween(rightCurtain, { x: 400 }, { duration: 1000, easing: tween.easeOut }); for (var i = 0; i < dancers.length; i++) { var delay = i * 300; tween(dancers[i], { y: dancers[i].y - 30 }, { duration: 800, easing: tween.easeInOut }); tween(dancers[i], { rotation: Math.PI / 4 }, { duration: 1200, easing: tween.easeInOut }); } }; return self; }); var EgyptScene = Container.expand(function () { var self = Container.call(this); var sand = self.attachAsset('sand', { anchorX: 0.5, anchorY: 1.0 }); var pyramid1 = self.attachAsset('pyramid', { anchorX: 0.5, anchorY: 1.0, x: -200, y: -100 }); var pyramid2 = self.attachAsset('pyramid', { anchorX: 0.5, anchorY: 1.0, x: 200, y: -100, scaleX: 0.8, scaleY: 0.8 }); var sun = self.attachAsset('sun', { anchorX: 0.5, anchorY: 0.5, x: 600, y: -300 }); self.animate = function () { tween(sun, { x: 700 }, { duration: 3000, easing: tween.easeInOut }); tween(pyramid1, { y: pyramid1.y - 20 }, { duration: 2000, easing: tween.easeInOut }); tween(pyramid2, { y: pyramid2.y - 15 }, { duration: 2500, easing: tween.easeInOut }); }; return self; }); var MoonScene = Container.expand(function () { var self = Container.call(this); var sky = self.attachAsset('nightSky', { anchorX: 0.5, anchorY: 0.5 }); var moon = self.attachAsset('moon', { anchorX: 0.5, anchorY: 0.5, x: 400, y: -200 }); var stars = []; for (var i = 0; i < 20; i++) { var star = self.attachAsset('star', { anchorX: 0.5, anchorY: 0.5, x: (Math.random() - 0.5) * 1400, y: (Math.random() - 0.5) * 700 }); stars.push(star); } self.animate = function () { tween(moon, { scaleX: 1.2, scaleY: 1.2 }, { duration: 3000, easing: tween.easeInOut }); tween(moon, { tint: 0xffd700 }, { duration: 2000, easing: tween.easeInOut }); for (var i = 0; i < stars.length; i++) { var delay = Math.random() * 1000; tween(stars[i], { alpha: 0.3 }, { duration: 1000 + delay, easing: tween.easeInOut }); tween(stars[i], { alpha: 1.0 }, { duration: 1000 + delay, easing: tween.easeInOut }); } }; return self; }); var OnionScene = Container.expand(function () { var self = Container.call(this); var onions = []; for (var i = 0; i < 8; i++) { var onion = self.attachAsset('onion', { anchorX: 0.5, anchorY: 0.5, x: (i - 4) * 150, y: Math.sin(i) * 50 }); var layer = self.attachAsset('onionLayer', { anchorX: 0.5, anchorY: 0.5, x: (i - 4) * 150, y: Math.sin(i) * 50 }); onions.push({ onion: onion, layer: layer }); } self.animate = function () { for (var i = 0; i < onions.length; i++) { var delay = i * 200; tween(onions[i].onion, { y: onions[i].onion.y - 50 }, { duration: 1500, easing: tween.bounceOut }); tween(onions[i].layer, { y: onions[i].layer.y - 50 }, { duration: 1500, easing: tween.bounceOut }); tween(onions[i].onion, { rotation: Math.PI * 2 }, { duration: 2000, easing: tween.linear }); } }; return self; }); var PowerpuffGirl = Container.expand(function (color) { var self = Container.call(this); var body = self.attachAsset('blossom', { anchorX: 0.5, anchorY: 1.0, tint: color }); return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x87ceeb }); /**** * Game Code ****/ // Scene 4: Full Moon // Scene 3: Ballet // Scene 2: Onions // Scene 1: Egypt // Powerpuff Girls var gameState = 'menu'; // 'menu', 'playing', 'scene1', 'scene2', 'scene3', 'scene4' var currentScene = null; var sceneTimer = 0; var sceneDuration = 4000; // 4 seconds per scene // TV setup var tvFrame = game.addChild(LK.getAsset('tvFrame', { anchorX: 0.5, anchorY: 0.5, x: 1024, y: 1000 })); var tvScreen = game.addChild(LK.getAsset('tvScreen', { anchorX: 0.5, anchorY: 0.5, x: 1024, y: 1000 })); // Play button var playButton = game.addChild(LK.getAsset('playButton', { anchorX: 0.5, anchorY: 0.5, x: 1024, y: 1000 })); var playTriangle = game.addChild(LK.getAsset('playTriangle', { anchorX: 0.5, anchorY: 0.5, x: 1024, y: 1000 })); // Powerpuff Girls var blossom = game.addChild(new PowerpuffGirl(0xff69b4)); blossom.x = 700; blossom.y = 1600; var bubbles = game.addChild(new PowerpuffGirl(0x87ceeb)); bubbles.x = 1024; bubbles.y = 1600; var buttercup = game.addChild(new PowerpuffGirl(0x90ee90)); buttercup.x = 1348; buttercup.y = 1600; // Title text var titleText = new Text2('Jungle Me 1', { size: 80, fill: 0xFFFFFF }); titleText.anchor.set(0.5, 0.5); titleText.x = 1024; titleText.y = 800; game.addChild(titleText); // Instructions text var instructionText = new Text2('Tap PLAY to start the movie!', { size: 60, fill: 0xFFFFFF }); instructionText.anchor.set(0.5, 0.5); instructionText.x = 1024; instructionText.y = 1200; game.addChild(instructionText); function startScene(sceneNumber) { // Clear previous scene if (currentScene) { currentScene.destroy(); currentScene = null; } // Hide menu elements playButton.visible = false; playTriangle.visible = false; titleText.visible = false; instructionText.visible = false; // Create new scene switch (sceneNumber) { case 1: currentScene = new EgyptScene(); gameState = 'scene1'; break; case 2: currentScene = new OnionScene(); gameState = 'scene2'; break; case 3: currentScene = new BalletScene(); gameState = 'scene3'; break; case 4: currentScene = new MoonScene(); gameState = 'scene4'; break; } if (currentScene) { currentScene.x = 1024; currentScene.y = 1000; tvScreen.addChild(currentScene); currentScene.animate(); LK.getSound('sceneTransition').play(); } sceneTimer = 0; } function showMenu() { gameState = 'menu'; // Clear current scene if (currentScene) { currentScene.destroy(); currentScene = null; } // Show menu elements playButton.visible = true; playTriangle.visible = true; titleText.visible = true; instructionText.visible = true; } // Play button click handler playButton.down = function (x, y, obj) { if (gameState === 'menu') { LK.getSound('click').play(); gameState = 'playing'; startScene(1); } }; playTriangle.down = function (x, y, obj) { if (gameState === 'menu') { LK.getSound('click').play(); gameState = 'playing'; startScene(1); } }; // Skip scene on tap tvScreen.down = function (x, y, obj) { if (gameState !== 'menu') { LK.getSound('click').play(); switch (gameState) { case 'scene1': startScene(2); break; case 'scene2': startScene(3); break; case 'scene3': startScene(4); break; case 'scene4': showMenu(); break; } } }; game.update = function () { if (gameState !== 'menu') { sceneTimer += 16; // Approximately 60 FPS if (sceneTimer >= sceneDuration) { switch (gameState) { case 'scene1': startScene(2); break; case 'scene2': startScene(3); break; case 'scene3': startScene(4); break; case 'scene4': showMenu(); break; } } } // Animate play button if (gameState === 'menu') { playButton.alpha = 0.8 + 0.2 * Math.sin(LK.ticks * 0.1); } };
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
/****
* Classes
****/
var BalletScene = Container.expand(function () {
var self = Container.call(this);
var stage = self.attachAsset('stage', {
anchorX: 0.5,
anchorY: 1.0,
y: 100
});
var leftCurtain = self.attachAsset('curtain', {
anchorX: 1.0,
anchorY: 0.5,
x: -50
});
var rightCurtain = self.attachAsset('curtain', {
anchorX: 0.0,
anchorY: 0.5,
x: 50
});
var dancers = [];
for (var i = 0; i < 5; i++) {
var dancer = self.attachAsset('dancer', {
anchorX: 0.5,
anchorY: 1.0,
x: (i - 2) * 100,
y: 50
});
dancers.push(dancer);
}
self.animate = function () {
tween(leftCurtain, {
x: -400
}, {
duration: 1000,
easing: tween.easeOut
});
tween(rightCurtain, {
x: 400
}, {
duration: 1000,
easing: tween.easeOut
});
for (var i = 0; i < dancers.length; i++) {
var delay = i * 300;
tween(dancers[i], {
y: dancers[i].y - 30
}, {
duration: 800,
easing: tween.easeInOut
});
tween(dancers[i], {
rotation: Math.PI / 4
}, {
duration: 1200,
easing: tween.easeInOut
});
}
};
return self;
});
var EgyptScene = Container.expand(function () {
var self = Container.call(this);
var sand = self.attachAsset('sand', {
anchorX: 0.5,
anchorY: 1.0
});
var pyramid1 = self.attachAsset('pyramid', {
anchorX: 0.5,
anchorY: 1.0,
x: -200,
y: -100
});
var pyramid2 = self.attachAsset('pyramid', {
anchorX: 0.5,
anchorY: 1.0,
x: 200,
y: -100,
scaleX: 0.8,
scaleY: 0.8
});
var sun = self.attachAsset('sun', {
anchorX: 0.5,
anchorY: 0.5,
x: 600,
y: -300
});
self.animate = function () {
tween(sun, {
x: 700
}, {
duration: 3000,
easing: tween.easeInOut
});
tween(pyramid1, {
y: pyramid1.y - 20
}, {
duration: 2000,
easing: tween.easeInOut
});
tween(pyramid2, {
y: pyramid2.y - 15
}, {
duration: 2500,
easing: tween.easeInOut
});
};
return self;
});
var MoonScene = Container.expand(function () {
var self = Container.call(this);
var sky = self.attachAsset('nightSky', {
anchorX: 0.5,
anchorY: 0.5
});
var moon = self.attachAsset('moon', {
anchorX: 0.5,
anchorY: 0.5,
x: 400,
y: -200
});
var stars = [];
for (var i = 0; i < 20; i++) {
var star = self.attachAsset('star', {
anchorX: 0.5,
anchorY: 0.5,
x: (Math.random() - 0.5) * 1400,
y: (Math.random() - 0.5) * 700
});
stars.push(star);
}
self.animate = function () {
tween(moon, {
scaleX: 1.2,
scaleY: 1.2
}, {
duration: 3000,
easing: tween.easeInOut
});
tween(moon, {
tint: 0xffd700
}, {
duration: 2000,
easing: tween.easeInOut
});
for (var i = 0; i < stars.length; i++) {
var delay = Math.random() * 1000;
tween(stars[i], {
alpha: 0.3
}, {
duration: 1000 + delay,
easing: tween.easeInOut
});
tween(stars[i], {
alpha: 1.0
}, {
duration: 1000 + delay,
easing: tween.easeInOut
});
}
};
return self;
});
var OnionScene = Container.expand(function () {
var self = Container.call(this);
var onions = [];
for (var i = 0; i < 8; i++) {
var onion = self.attachAsset('onion', {
anchorX: 0.5,
anchorY: 0.5,
x: (i - 4) * 150,
y: Math.sin(i) * 50
});
var layer = self.attachAsset('onionLayer', {
anchorX: 0.5,
anchorY: 0.5,
x: (i - 4) * 150,
y: Math.sin(i) * 50
});
onions.push({
onion: onion,
layer: layer
});
}
self.animate = function () {
for (var i = 0; i < onions.length; i++) {
var delay = i * 200;
tween(onions[i].onion, {
y: onions[i].onion.y - 50
}, {
duration: 1500,
easing: tween.bounceOut
});
tween(onions[i].layer, {
y: onions[i].layer.y - 50
}, {
duration: 1500,
easing: tween.bounceOut
});
tween(onions[i].onion, {
rotation: Math.PI * 2
}, {
duration: 2000,
easing: tween.linear
});
}
};
return self;
});
var PowerpuffGirl = Container.expand(function (color) {
var self = Container.call(this);
var body = self.attachAsset('blossom', {
anchorX: 0.5,
anchorY: 1.0,
tint: color
});
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x87ceeb
});
/****
* Game Code
****/
// Scene 4: Full Moon
// Scene 3: Ballet
// Scene 2: Onions
// Scene 1: Egypt
// Powerpuff Girls
var gameState = 'menu'; // 'menu', 'playing', 'scene1', 'scene2', 'scene3', 'scene4'
var currentScene = null;
var sceneTimer = 0;
var sceneDuration = 4000; // 4 seconds per scene
// TV setup
var tvFrame = game.addChild(LK.getAsset('tvFrame', {
anchorX: 0.5,
anchorY: 0.5,
x: 1024,
y: 1000
}));
var tvScreen = game.addChild(LK.getAsset('tvScreen', {
anchorX: 0.5,
anchorY: 0.5,
x: 1024,
y: 1000
}));
// Play button
var playButton = game.addChild(LK.getAsset('playButton', {
anchorX: 0.5,
anchorY: 0.5,
x: 1024,
y: 1000
}));
var playTriangle = game.addChild(LK.getAsset('playTriangle', {
anchorX: 0.5,
anchorY: 0.5,
x: 1024,
y: 1000
}));
// Powerpuff Girls
var blossom = game.addChild(new PowerpuffGirl(0xff69b4));
blossom.x = 700;
blossom.y = 1600;
var bubbles = game.addChild(new PowerpuffGirl(0x87ceeb));
bubbles.x = 1024;
bubbles.y = 1600;
var buttercup = game.addChild(new PowerpuffGirl(0x90ee90));
buttercup.x = 1348;
buttercup.y = 1600;
// Title text
var titleText = new Text2('Jungle Me 1', {
size: 80,
fill: 0xFFFFFF
});
titleText.anchor.set(0.5, 0.5);
titleText.x = 1024;
titleText.y = 800;
game.addChild(titleText);
// Instructions text
var instructionText = new Text2('Tap PLAY to start the movie!', {
size: 60,
fill: 0xFFFFFF
});
instructionText.anchor.set(0.5, 0.5);
instructionText.x = 1024;
instructionText.y = 1200;
game.addChild(instructionText);
function startScene(sceneNumber) {
// Clear previous scene
if (currentScene) {
currentScene.destroy();
currentScene = null;
}
// Hide menu elements
playButton.visible = false;
playTriangle.visible = false;
titleText.visible = false;
instructionText.visible = false;
// Create new scene
switch (sceneNumber) {
case 1:
currentScene = new EgyptScene();
gameState = 'scene1';
break;
case 2:
currentScene = new OnionScene();
gameState = 'scene2';
break;
case 3:
currentScene = new BalletScene();
gameState = 'scene3';
break;
case 4:
currentScene = new MoonScene();
gameState = 'scene4';
break;
}
if (currentScene) {
currentScene.x = 1024;
currentScene.y = 1000;
tvScreen.addChild(currentScene);
currentScene.animate();
LK.getSound('sceneTransition').play();
}
sceneTimer = 0;
}
function showMenu() {
gameState = 'menu';
// Clear current scene
if (currentScene) {
currentScene.destroy();
currentScene = null;
}
// Show menu elements
playButton.visible = true;
playTriangle.visible = true;
titleText.visible = true;
instructionText.visible = true;
}
// Play button click handler
playButton.down = function (x, y, obj) {
if (gameState === 'menu') {
LK.getSound('click').play();
gameState = 'playing';
startScene(1);
}
};
playTriangle.down = function (x, y, obj) {
if (gameState === 'menu') {
LK.getSound('click').play();
gameState = 'playing';
startScene(1);
}
};
// Skip scene on tap
tvScreen.down = function (x, y, obj) {
if (gameState !== 'menu') {
LK.getSound('click').play();
switch (gameState) {
case 'scene1':
startScene(2);
break;
case 'scene2':
startScene(3);
break;
case 'scene3':
startScene(4);
break;
case 'scene4':
showMenu();
break;
}
}
};
game.update = function () {
if (gameState !== 'menu') {
sceneTimer += 16; // Approximately 60 FPS
if (sceneTimer >= sceneDuration) {
switch (gameState) {
case 'scene1':
startScene(2);
break;
case 'scene2':
startScene(3);
break;
case 'scene3':
startScene(4);
break;
case 'scene4':
showMenu();
break;
}
}
}
// Animate play button
if (gameState === 'menu') {
playButton.alpha = 0.8 + 0.2 * Math.sin(LK.ticks * 0.1);
}
};