Code edit (1 edits merged)
Please save this source code
User prompt
PBS Kids Super Hero Transformation
Initial prompt
PBS kids: tap to turn dash into mega dash with strong muscles, and tap to turn dot into mega dot with big teeth to eat with, and tap to turn del into mega del with longest arms to stretch with, and turn dee into mega dee with a cape to fly with
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
/****
* Classes
****/
var Character = Container.expand(function (characterType) {
var self = Container.call(this);
self.characterType = characterType;
self.isTransformed = false;
// Base character graphics
var baseGraphics = self.attachAsset(characterType + 'Base', {
anchorX: 0.5,
anchorY: 0.5
});
// Character name text
var nameText = new Text2(characterType.toUpperCase(), {
size: 60,
fill: 0xFFFFFF
});
nameText.anchor.set(0.5, 0.5);
nameText.x = 0;
nameText.y = -250;
self.addChild(nameText);
// Transformation elements
self.transformElements = [];
self.createTransformationElements = function () {
// Clear existing transformation elements
for (var i = 0; i < self.transformElements.length; i++) {
self.transformElements[i].destroy();
}
self.transformElements = [];
if (self.characterType === 'dash') {
// Create muscles
var leftMuscle = LK.getAsset('muscle', {
anchorX: 0.5,
anchorY: 0.5
});
leftMuscle.x = -120;
leftMuscle.y = -50;
self.addChild(leftMuscle);
self.transformElements.push(leftMuscle);
var rightMuscle = LK.getAsset('muscle', {
anchorX: 0.5,
anchorY: 0.5
});
rightMuscle.x = 120;
rightMuscle.y = -50;
self.addChild(rightMuscle);
self.transformElements.push(rightMuscle);
} else if (self.characterType === 'dot') {
// Create teeth
var leftTooth = LK.getAsset('tooth', {
anchorX: 0.5,
anchorY: 0.5
});
leftTooth.x = -40;
leftTooth.y = 50;
self.addChild(leftTooth);
self.transformElements.push(leftTooth);
var rightTooth = LK.getAsset('tooth', {
anchorX: 0.5,
anchorY: 0.5
});
rightTooth.x = 40;
rightTooth.y = 50;
self.addChild(rightTooth);
self.transformElements.push(rightTooth);
} else if (self.characterType === 'del') {
// Create stretchy arms
var leftArm = LK.getAsset('arm', {
anchorX: 0,
anchorY: 0.5
});
leftArm.x = -200;
leftArm.y = 0;
leftArm.scaleX = 1.5;
self.addChild(leftArm);
self.transformElements.push(leftArm);
var rightArm = LK.getAsset('arm', {
anchorX: 1,
anchorY: 0.5
});
rightArm.x = 200;
rightArm.y = 0;
rightArm.scaleX = 1.5;
self.addChild(rightArm);
self.transformElements.push(rightArm);
} else if (self.characterType === 'dee') {
// Create cape
var cape = LK.getAsset('cape', {
anchorX: 0.5,
anchorY: 0
});
cape.x = 0;
cape.y = -200;
self.addChild(cape);
self.transformElements.push(cape);
}
};
self.transform = function () {
if (self.isTransformed) {
self.untransform();
return;
}
self.isTransformed = true;
self.createTransformationElements();
// Base transformation animation
tween(baseGraphics, {
scaleX: 1.2,
scaleY: 1.2
}, {
duration: 300,
easing: tween.elasticOut
});
// Character-specific transformations and animations
if (self.characterType === 'dash') {
LK.getSound('powerUp').play();
LK.effects.flashObject(self, 0xffff00, 500);
// Animate muscles growing
for (var i = 0; i < self.transformElements.length; i++) {
var muscle = self.transformElements[i];
muscle.scaleX = 0;
muscle.scaleY = 0;
tween(muscle, {
scaleX: 1.3,
scaleY: 1.3
}, {
duration: 400,
easing: tween.bounceOut
});
}
} else if (self.characterType === 'dot') {
LK.getSound('chomp').play();
// Animate teeth appearing and chomping
for (var i = 0; i < self.transformElements.length; i++) {
var tooth = self.transformElements[i];
tooth.scaleY = 0;
tween(tooth, {
scaleY: 1.5
}, {
duration: 300,
easing: tween.bounceOut,
onFinish: function onFinish() {
// Chomping animation
tween(tooth, {
scaleY: 1.2
}, {
duration: 200
});
}
});
}
} else if (self.characterType === 'del') {
LK.getSound('stretch').play();
// Animate arms stretching
for (var i = 0; i < self.transformElements.length; i++) {
var arm = self.transformElements[i];
var originalScaleX = arm.scaleX;
tween(arm, {
scaleX: originalScaleX * 2
}, {
duration: 600,
easing: tween.elasticOut
});
}
} else if (self.characterType === 'dee') {
LK.getSound('fly').play();
// Animate cape and flying motion
var cape = self.transformElements[0];
cape.alpha = 0;
tween(cape, {
alpha: 1
}, {
duration: 300
});
// Flying animation - move up and down
self.startFlying();
}
};
self.startFlying = function () {
if (!self.isTransformed || self.characterType !== 'dee') return;
var originalY = self.y;
tween(self, {
y: originalY - 30
}, {
duration: 1000,
easing: tween.easeInOut,
onFinish: function onFinish() {
if (self.isTransformed) {
tween(self, {
y: originalY + 30
}, {
duration: 1000,
easing: tween.easeInOut,
onFinish: function onFinish() {
if (self.isTransformed) {
self.startFlying();
}
}
});
}
}
});
};
self.untransform = function () {
self.isTransformed = false;
// Stop any ongoing animations
tween.stop(self);
tween.stop(baseGraphics);
// Reset base graphics
tween(baseGraphics, {
scaleX: 1,
scaleY: 1
}, {
duration: 200,
easing: tween.easeOut
});
// Remove transformation elements
for (var i = 0; i < self.transformElements.length; i++) {
tween(self.transformElements[i], {
alpha: 0,
scaleX: 0,
scaleY: 0
}, {
duration: 200,
easing: tween.easeIn,
onFinish: function onFinish() {
if (self.transformElements[i]) {
self.transformElements[i].destroy();
}
}
});
}
self.transformElements = [];
// Reset position for Dee
if (self.characterType === 'dee') {
tween(self, {
y: self.originalY
}, {
duration: 300
});
}
};
self.down = function (x, y, obj) {
self.transform();
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x87ceeb
});
/****
* Game Code
****/
// Sound effects
// Transformation effects
// Character base assets
// Title text
var titleText = new Text2('PBS KIDS SUPER HEROES', {
size: 80,
fill: 0xFFFFFF
});
titleText.anchor.set(0.5, 0.5);
titleText.x = 2048 / 2;
titleText.y = 200;
game.addChild(titleText);
// Instructions text
var instructionsText = new Text2('TAP TO TRANSFORM!', {
size: 60,
fill: 0xFFFF00
});
instructionsText.anchor.set(0.5, 0.5);
instructionsText.x = 2048 / 2;
instructionsText.y = 300;
game.addChild(instructionsText);
// Create characters
var characters = [];
var characterTypes = ['dash', 'dot', 'del', 'dee'];
var characterNames = ['DASH', 'DOT', 'DEL', 'DEE'];
// Position characters in a 2x2 grid
var gridPositions = [{
x: 2048 / 4,
y: 2732 / 2 - 200
},
// Top left
{
x: 3 * 2048 / 4,
y: 2732 / 2 - 200
},
// Top right
{
x: 2048 / 4,
y: 2732 / 2 + 200
},
// Bottom left
{
x: 3 * 2048 / 4,
y: 2732 / 2 + 200
} // Bottom right
];
for (var i = 0; i < characterTypes.length; i++) {
var character = new Character(characterTypes[i]);
character.x = gridPositions[i].x;
character.y = gridPositions[i].y;
character.originalY = character.y; // Store original Y for reset
game.addChild(character);
characters.push(character);
}
// Add sparkle effects periodically
var sparkleTimer = 0;
game.update = function () {
sparkleTimer++;
// Add sparkle effects every 2 seconds
if (sparkleTimer % 120 === 0) {
for (var i = 0; i < characters.length; i++) {
if (characters[i].isTransformed) {
LK.effects.flashObject(characters[i], 0xffffff, 300);
}
}
}
}; ===================================================================
--- original.js
+++ change.js
@@ -1,6 +1,329 @@
-/****
+/****
+* Plugins
+****/
+var tween = LK.import("@upit/tween.v1");
+
+/****
+* Classes
+****/
+var Character = Container.expand(function (characterType) {
+ var self = Container.call(this);
+ self.characterType = characterType;
+ self.isTransformed = false;
+ // Base character graphics
+ var baseGraphics = self.attachAsset(characterType + 'Base', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ // Character name text
+ var nameText = new Text2(characterType.toUpperCase(), {
+ size: 60,
+ fill: 0xFFFFFF
+ });
+ nameText.anchor.set(0.5, 0.5);
+ nameText.x = 0;
+ nameText.y = -250;
+ self.addChild(nameText);
+ // Transformation elements
+ self.transformElements = [];
+ self.createTransformationElements = function () {
+ // Clear existing transformation elements
+ for (var i = 0; i < self.transformElements.length; i++) {
+ self.transformElements[i].destroy();
+ }
+ self.transformElements = [];
+ if (self.characterType === 'dash') {
+ // Create muscles
+ var leftMuscle = LK.getAsset('muscle', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ leftMuscle.x = -120;
+ leftMuscle.y = -50;
+ self.addChild(leftMuscle);
+ self.transformElements.push(leftMuscle);
+ var rightMuscle = LK.getAsset('muscle', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ rightMuscle.x = 120;
+ rightMuscle.y = -50;
+ self.addChild(rightMuscle);
+ self.transformElements.push(rightMuscle);
+ } else if (self.characterType === 'dot') {
+ // Create teeth
+ var leftTooth = LK.getAsset('tooth', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ leftTooth.x = -40;
+ leftTooth.y = 50;
+ self.addChild(leftTooth);
+ self.transformElements.push(leftTooth);
+ var rightTooth = LK.getAsset('tooth', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ rightTooth.x = 40;
+ rightTooth.y = 50;
+ self.addChild(rightTooth);
+ self.transformElements.push(rightTooth);
+ } else if (self.characterType === 'del') {
+ // Create stretchy arms
+ var leftArm = LK.getAsset('arm', {
+ anchorX: 0,
+ anchorY: 0.5
+ });
+ leftArm.x = -200;
+ leftArm.y = 0;
+ leftArm.scaleX = 1.5;
+ self.addChild(leftArm);
+ self.transformElements.push(leftArm);
+ var rightArm = LK.getAsset('arm', {
+ anchorX: 1,
+ anchorY: 0.5
+ });
+ rightArm.x = 200;
+ rightArm.y = 0;
+ rightArm.scaleX = 1.5;
+ self.addChild(rightArm);
+ self.transformElements.push(rightArm);
+ } else if (self.characterType === 'dee') {
+ // Create cape
+ var cape = LK.getAsset('cape', {
+ anchorX: 0.5,
+ anchorY: 0
+ });
+ cape.x = 0;
+ cape.y = -200;
+ self.addChild(cape);
+ self.transformElements.push(cape);
+ }
+ };
+ self.transform = function () {
+ if (self.isTransformed) {
+ self.untransform();
+ return;
+ }
+ self.isTransformed = true;
+ self.createTransformationElements();
+ // Base transformation animation
+ tween(baseGraphics, {
+ scaleX: 1.2,
+ scaleY: 1.2
+ }, {
+ duration: 300,
+ easing: tween.elasticOut
+ });
+ // Character-specific transformations and animations
+ if (self.characterType === 'dash') {
+ LK.getSound('powerUp').play();
+ LK.effects.flashObject(self, 0xffff00, 500);
+ // Animate muscles growing
+ for (var i = 0; i < self.transformElements.length; i++) {
+ var muscle = self.transformElements[i];
+ muscle.scaleX = 0;
+ muscle.scaleY = 0;
+ tween(muscle, {
+ scaleX: 1.3,
+ scaleY: 1.3
+ }, {
+ duration: 400,
+ easing: tween.bounceOut
+ });
+ }
+ } else if (self.characterType === 'dot') {
+ LK.getSound('chomp').play();
+ // Animate teeth appearing and chomping
+ for (var i = 0; i < self.transformElements.length; i++) {
+ var tooth = self.transformElements[i];
+ tooth.scaleY = 0;
+ tween(tooth, {
+ scaleY: 1.5
+ }, {
+ duration: 300,
+ easing: tween.bounceOut,
+ onFinish: function onFinish() {
+ // Chomping animation
+ tween(tooth, {
+ scaleY: 1.2
+ }, {
+ duration: 200
+ });
+ }
+ });
+ }
+ } else if (self.characterType === 'del') {
+ LK.getSound('stretch').play();
+ // Animate arms stretching
+ for (var i = 0; i < self.transformElements.length; i++) {
+ var arm = self.transformElements[i];
+ var originalScaleX = arm.scaleX;
+ tween(arm, {
+ scaleX: originalScaleX * 2
+ }, {
+ duration: 600,
+ easing: tween.elasticOut
+ });
+ }
+ } else if (self.characterType === 'dee') {
+ LK.getSound('fly').play();
+ // Animate cape and flying motion
+ var cape = self.transformElements[0];
+ cape.alpha = 0;
+ tween(cape, {
+ alpha: 1
+ }, {
+ duration: 300
+ });
+ // Flying animation - move up and down
+ self.startFlying();
+ }
+ };
+ self.startFlying = function () {
+ if (!self.isTransformed || self.characterType !== 'dee') return;
+ var originalY = self.y;
+ tween(self, {
+ y: originalY - 30
+ }, {
+ duration: 1000,
+ easing: tween.easeInOut,
+ onFinish: function onFinish() {
+ if (self.isTransformed) {
+ tween(self, {
+ y: originalY + 30
+ }, {
+ duration: 1000,
+ easing: tween.easeInOut,
+ onFinish: function onFinish() {
+ if (self.isTransformed) {
+ self.startFlying();
+ }
+ }
+ });
+ }
+ }
+ });
+ };
+ self.untransform = function () {
+ self.isTransformed = false;
+ // Stop any ongoing animations
+ tween.stop(self);
+ tween.stop(baseGraphics);
+ // Reset base graphics
+ tween(baseGraphics, {
+ scaleX: 1,
+ scaleY: 1
+ }, {
+ duration: 200,
+ easing: tween.easeOut
+ });
+ // Remove transformation elements
+ for (var i = 0; i < self.transformElements.length; i++) {
+ tween(self.transformElements[i], {
+ alpha: 0,
+ scaleX: 0,
+ scaleY: 0
+ }, {
+ duration: 200,
+ easing: tween.easeIn,
+ onFinish: function onFinish() {
+ if (self.transformElements[i]) {
+ self.transformElements[i].destroy();
+ }
+ }
+ });
+ }
+ self.transformElements = [];
+ // Reset position for Dee
+ if (self.characterType === 'dee') {
+ tween(self, {
+ y: self.originalY
+ }, {
+ duration: 300
+ });
+ }
+ };
+ self.down = function (x, y, obj) {
+ self.transform();
+ };
+ return self;
+});
+
+/****
* Initialize Game
-****/
+****/
var game = new LK.Game({
- backgroundColor: 0x000000
-});
\ No newline at end of file
+ backgroundColor: 0x87ceeb
+});
+
+/****
+* Game Code
+****/
+// Sound effects
+// Transformation effects
+// Character base assets
+// Title text
+var titleText = new Text2('PBS KIDS SUPER HEROES', {
+ size: 80,
+ fill: 0xFFFFFF
+});
+titleText.anchor.set(0.5, 0.5);
+titleText.x = 2048 / 2;
+titleText.y = 200;
+game.addChild(titleText);
+// Instructions text
+var instructionsText = new Text2('TAP TO TRANSFORM!', {
+ size: 60,
+ fill: 0xFFFF00
+});
+instructionsText.anchor.set(0.5, 0.5);
+instructionsText.x = 2048 / 2;
+instructionsText.y = 300;
+game.addChild(instructionsText);
+// Create characters
+var characters = [];
+var characterTypes = ['dash', 'dot', 'del', 'dee'];
+var characterNames = ['DASH', 'DOT', 'DEL', 'DEE'];
+// Position characters in a 2x2 grid
+var gridPositions = [{
+ x: 2048 / 4,
+ y: 2732 / 2 - 200
+},
+// Top left
+{
+ x: 3 * 2048 / 4,
+ y: 2732 / 2 - 200
+},
+// Top right
+{
+ x: 2048 / 4,
+ y: 2732 / 2 + 200
+},
+// Bottom left
+{
+ x: 3 * 2048 / 4,
+ y: 2732 / 2 + 200
+} // Bottom right
+];
+for (var i = 0; i < characterTypes.length; i++) {
+ var character = new Character(characterTypes[i]);
+ character.x = gridPositions[i].x;
+ character.y = gridPositions[i].y;
+ character.originalY = character.y; // Store original Y for reset
+ game.addChild(character);
+ characters.push(character);
+}
+// Add sparkle effects periodically
+var sparkleTimer = 0;
+game.update = function () {
+ sparkleTimer++;
+ // Add sparkle effects every 2 seconds
+ if (sparkleTimer % 120 === 0) {
+ for (var i = 0; i < characters.length; i++) {
+ if (characters[i].isTransformed) {
+ LK.effects.flashObject(characters[i], 0xffffff, 300);
+ }
+ }
+ }
+};
\ No newline at end of file