/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
/****
* Classes
****/
var Character = Container.expand(function (name) {
var self = Container.call(this);
var characterBody = self.attachAsset('character', {
anchorX: 0.5,
anchorY: 0.5
});
self.name = name;
self.isTransformed = false;
self.hair = null;
self.leftTooth = null;
self.rightTooth = null;
self.leftArm = null;
self.rightArm = null;
self.transform = function () {
if (self.isTransformed) return;
self.isTransformed = true;
// Turn character purple
tween(characterBody, {
tint: 0x8A2BE2
}, {
duration: 500
});
// Add long purple hair
self.hair = self.addChild(LK.getAsset('hair', {
anchorX: 0.5,
anchorY: 1,
scaleX: 0,
scaleY: 0
}));
self.hair.x = 0;
self.hair.y = -125;
// Add long teeth
self.leftTooth = self.addChild(LK.getAsset('tooth', {
anchorX: 0.5,
anchorY: 0,
scaleX: 0,
scaleY: 0
}));
self.leftTooth.x = -30;
self.leftTooth.y = 50;
self.rightTooth = self.addChild(LK.getAsset('tooth', {
anchorX: 0.5,
anchorY: 0,
scaleX: 0,
scaleY: 0
}));
self.rightTooth.x = 30;
self.rightTooth.y = 50;
// Add extended arms
self.leftArm = self.addChild(LK.getAsset('arm', {
anchorX: 1,
anchorY: 0.5,
scaleX: 0,
scaleY: 0
}));
self.leftArm.x = -100;
self.leftArm.y = 0;
self.rightArm = self.addChild(LK.getAsset('arm', {
anchorX: 0,
anchorY: 0.5,
scaleX: 0,
scaleY: 0
}));
self.rightArm.x = 100;
self.rightArm.y = 0;
// Animate transformations
tween(self.hair, {
scaleX: 1,
scaleY: 1
}, {
duration: 800,
easing: tween.bounceOut
});
tween(self.leftTooth, {
scaleX: 1,
scaleY: 1
}, {
duration: 600,
easing: tween.elasticOut
});
tween(self.rightTooth, {
scaleX: 1,
scaleY: 1
}, {
duration: 600,
easing: tween.elasticOut
});
tween(self.leftArm, {
scaleX: 1,
scaleY: 1
}, {
duration: 1000,
easing: tween.easeOut
});
tween(self.rightArm, {
scaleX: 1,
scaleY: 1
}, {
duration: 1000,
easing: tween.easeOut
});
// Play transformation sound
LK.getSound('transform').play();
// Flash effect
LK.effects.flashObject(self, 0x8A2BE2, 800);
};
return self;
});
var PurplePotion = Container.expand(function () {
var self = Container.call(this);
var potionGraphics = self.attachAsset('potion', {
anchorX: 0.5,
anchorY: 0.5
});
self.originalX = 41;
self.originalY = 200;
self.isDragging = false;
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x87CEEB
});
/****
* Game Code
****/
var potion = null;
var characters = [];
var dragTarget = null;
// Create purple potion at starting position
potion = game.addChild(new PurplePotion());
potion.x = 41;
potion.y = 200;
// Create four PBS Kids characters
var characterNames = ['Dash', 'Dot', 'Dee', 'Del'];
var characterPositions = [{
x: 400,
y: 400
}, {
x: 800,
y: 400
}, {
x: 1200,
y: 400
}, {
x: 1600,
y: 400
}];
for (var i = 0; i < characterNames.length; i++) {
var character = game.addChild(new Character(characterNames[i]));
character.x = characterPositions[i].x;
character.y = characterPositions[i].y;
characters.push(character);
}
// Add title text
var titleText = new Text2('Purple Villain Transformation Lab', {
size: 80,
fill: 0x4B0082
});
titleText.anchor.set(0.5, 0);
LK.gui.top.addChild(titleText);
titleText.y = 100;
// Add instruction text
var instructionText = new Text2('Drag the purple potion to transform characters!', {
size: 50,
fill: 0x000080
});
instructionText.anchor.set(0.5, 0);
LK.gui.top.addChild(instructionText);
instructionText.y = 200;
function handleMove(x, y, obj) {
if (dragTarget === potion) {
potion.x = x;
potion.y = y;
}
}
game.move = handleMove;
game.down = function (x, y, obj) {
// Check if clicking on potion
if (potion.intersects({
x: x,
y: y,
width: 1,
height: 1
})) {
dragTarget = potion;
potion.isDragging = true;
handleMove(x, y, obj);
}
};
game.up = function (x, y, obj) {
if (dragTarget === potion) {
// Check if potion intersects with any character
for (var i = 0; i < characters.length; i++) {
var character = characters[i];
if (potion.intersects(character)) {
character.transform();
break;
}
}
// Return potion to original position
tween(potion, {
x: potion.originalX,
y: potion.originalY
}, {
duration: 500,
easing: tween.easeOut
});
potion.isDragging = false;
dragTarget = null;
}
};
game.update = function () {
// Game runs at 60 FPS, update logic here if needed
}; ===================================================================
--- original.js
+++ change.js
@@ -1,6 +1,227 @@
-/****
+/****
+* Plugins
+****/
+var tween = LK.import("@upit/tween.v1");
+
+/****
+* Classes
+****/
+var Character = Container.expand(function (name) {
+ var self = Container.call(this);
+ var characterBody = self.attachAsset('character', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.name = name;
+ self.isTransformed = false;
+ self.hair = null;
+ self.leftTooth = null;
+ self.rightTooth = null;
+ self.leftArm = null;
+ self.rightArm = null;
+ self.transform = function () {
+ if (self.isTransformed) return;
+ self.isTransformed = true;
+ // Turn character purple
+ tween(characterBody, {
+ tint: 0x8A2BE2
+ }, {
+ duration: 500
+ });
+ // Add long purple hair
+ self.hair = self.addChild(LK.getAsset('hair', {
+ anchorX: 0.5,
+ anchorY: 1,
+ scaleX: 0,
+ scaleY: 0
+ }));
+ self.hair.x = 0;
+ self.hair.y = -125;
+ // Add long teeth
+ self.leftTooth = self.addChild(LK.getAsset('tooth', {
+ anchorX: 0.5,
+ anchorY: 0,
+ scaleX: 0,
+ scaleY: 0
+ }));
+ self.leftTooth.x = -30;
+ self.leftTooth.y = 50;
+ self.rightTooth = self.addChild(LK.getAsset('tooth', {
+ anchorX: 0.5,
+ anchorY: 0,
+ scaleX: 0,
+ scaleY: 0
+ }));
+ self.rightTooth.x = 30;
+ self.rightTooth.y = 50;
+ // Add extended arms
+ self.leftArm = self.addChild(LK.getAsset('arm', {
+ anchorX: 1,
+ anchorY: 0.5,
+ scaleX: 0,
+ scaleY: 0
+ }));
+ self.leftArm.x = -100;
+ self.leftArm.y = 0;
+ self.rightArm = self.addChild(LK.getAsset('arm', {
+ anchorX: 0,
+ anchorY: 0.5,
+ scaleX: 0,
+ scaleY: 0
+ }));
+ self.rightArm.x = 100;
+ self.rightArm.y = 0;
+ // Animate transformations
+ tween(self.hair, {
+ scaleX: 1,
+ scaleY: 1
+ }, {
+ duration: 800,
+ easing: tween.bounceOut
+ });
+ tween(self.leftTooth, {
+ scaleX: 1,
+ scaleY: 1
+ }, {
+ duration: 600,
+ easing: tween.elasticOut
+ });
+ tween(self.rightTooth, {
+ scaleX: 1,
+ scaleY: 1
+ }, {
+ duration: 600,
+ easing: tween.elasticOut
+ });
+ tween(self.leftArm, {
+ scaleX: 1,
+ scaleY: 1
+ }, {
+ duration: 1000,
+ easing: tween.easeOut
+ });
+ tween(self.rightArm, {
+ scaleX: 1,
+ scaleY: 1
+ }, {
+ duration: 1000,
+ easing: tween.easeOut
+ });
+ // Play transformation sound
+ LK.getSound('transform').play();
+ // Flash effect
+ LK.effects.flashObject(self, 0x8A2BE2, 800);
+ };
+ return self;
+});
+var PurplePotion = Container.expand(function () {
+ var self = Container.call(this);
+ var potionGraphics = self.attachAsset('potion', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.originalX = 41;
+ self.originalY = 200;
+ self.isDragging = false;
+ return self;
+});
+
+/****
* Initialize Game
-****/
+****/
var game = new LK.Game({
- backgroundColor: 0x000000
-});
\ No newline at end of file
+ backgroundColor: 0x87CEEB
+});
+
+/****
+* Game Code
+****/
+var potion = null;
+var characters = [];
+var dragTarget = null;
+// Create purple potion at starting position
+potion = game.addChild(new PurplePotion());
+potion.x = 41;
+potion.y = 200;
+// Create four PBS Kids characters
+var characterNames = ['Dash', 'Dot', 'Dee', 'Del'];
+var characterPositions = [{
+ x: 400,
+ y: 400
+}, {
+ x: 800,
+ y: 400
+}, {
+ x: 1200,
+ y: 400
+}, {
+ x: 1600,
+ y: 400
+}];
+for (var i = 0; i < characterNames.length; i++) {
+ var character = game.addChild(new Character(characterNames[i]));
+ character.x = characterPositions[i].x;
+ character.y = characterPositions[i].y;
+ characters.push(character);
+}
+// Add title text
+var titleText = new Text2('Purple Villain Transformation Lab', {
+ size: 80,
+ fill: 0x4B0082
+});
+titleText.anchor.set(0.5, 0);
+LK.gui.top.addChild(titleText);
+titleText.y = 100;
+// Add instruction text
+var instructionText = new Text2('Drag the purple potion to transform characters!', {
+ size: 50,
+ fill: 0x000080
+});
+instructionText.anchor.set(0.5, 0);
+LK.gui.top.addChild(instructionText);
+instructionText.y = 200;
+function handleMove(x, y, obj) {
+ if (dragTarget === potion) {
+ potion.x = x;
+ potion.y = y;
+ }
+}
+game.move = handleMove;
+game.down = function (x, y, obj) {
+ // Check if clicking on potion
+ if (potion.intersects({
+ x: x,
+ y: y,
+ width: 1,
+ height: 1
+ })) {
+ dragTarget = potion;
+ potion.isDragging = true;
+ handleMove(x, y, obj);
+ }
+};
+game.up = function (x, y, obj) {
+ if (dragTarget === potion) {
+ // Check if potion intersects with any character
+ for (var i = 0; i < characters.length; i++) {
+ var character = characters[i];
+ if (potion.intersects(character)) {
+ character.transform();
+ break;
+ }
+ }
+ // Return potion to original position
+ tween(potion, {
+ x: potion.originalX,
+ y: potion.originalY
+ }, {
+ duration: 500,
+ easing: tween.easeOut
+ });
+ potion.isDragging = false;
+ dragTarget = null;
+ }
+};
+game.update = function () {
+ // Game runs at 60 FPS, update logic here if needed
+};
\ No newline at end of file