Code edit (1 edits merged)
Please save this source code
Code edit (1 edits merged)
Please save this source code
Code edit (2 edits merged)
Please save this source code
User prompt
in PhotoFrameShadow, set the same x for all shadowRight, but increase the width by i*2
User prompt
Please fix the bug: 'TypeError: shadowBottom is undefined' in or related to this line: 'shadowRight.y = yMax + 40 + shadowBottom.height / 2;' Line Number: 199
User prompt
update shadowRight y to be exactly adjacent to shadowBottom
Code edit (1 edits merged)
Please save this source code
User prompt
in PhotoFrameShadow, set the same y for all shadowBottom, but increase the height by i*2
Code edit (1 edits merged)
Please save this source code
User prompt
in gameInitialize re order backgroundLayer and foregroundLayer addChild instruction for clarity
User prompt
move photoFrameShadow to z-index 0
User prompt
move photoFrameBackground to z-index 0
Code edit (1 edits merged)
Please save this source code
User prompt
Please fix the bug: 'ReferenceError: frameBackground is not defined' in or related to this line: 'frameBackground.visible = false;' Line Number: 361
User prompt
rename frameBackground to photoFrameBackground
User prompt
remove the shadow from PhotoFrame class, and instanciate photoFrameShadow in background layer
User prompt
create a new global variable photoFrameShadow
User prompt
move the shadow to a separate class : PhotoFrameShadow
Code edit (1 edits merged)
Please save this source code
User prompt
add yMin to shadow.y
User prompt
use (yMax - yMin)/2 instead of yMin for shadow.y
User prompt
use yMin for shadow.y instead of yMax
User prompt
use height= yMax - yMin for shadow
User prompt
Do this step by step place shadowRight and shadowBottom in a single loop remove shadowRight from the loop rename shadowBottom to shadow use width = xMax - xMin and height= yMax - yMin for shadow
User prompt
use width = xMax - xMin and height= yMax - yMin for shadow
/**** * Classes ****/ /***********************************************************************************/ /********************************** CAMERA HUD CLASS ************************************/ /***********************************************************************************/ var CameraHUD = Container.expand(function () { var self = Container.call(this); function createCorner(x, y, rotation) { var corner = new Container(); var line1 = LK.getAsset('line', { width: 100, height: 20, anchorX: 0, anchorY: 0 }); var line2 = LK.getAsset('line', { width: 100, height: 20, anchorX: 0, anchorY: 0 }); line2.rotation = Math.PI / 2; line1.alpha = 0.5; line2.alpha = 0.5; corner.addChild(line1); corner.addChild(line2); corner.x = x; corner.y = y; corner.rotation = rotation; return corner; } var topLeft = createCorner(256, 700, 0); var topRight = createCorner(2048 - 256, 700, Math.PI / 2); var bottomLeft = createCorner(256, 2732 - 700, -Math.PI / 2); var bottomRight = createCorner(2048 - 256, 2732 - 700, Math.PI); self.addChild(topLeft); self.addChild(topRight); self.addChild(bottomLeft); self.addChild(bottomRight); }); /***********************************************************************************/ /********************************** FRAME BACKGROUND CLASS *************************/ /***********************************************************************************/ var FrameBackground = Container.expand(function () { var self = Container.call(this); var frameBackground = self.attachAsset('background', { anchorX: 0.5, anchorY: 0.5, width: xMax - xMin, height: yMax - yMin, x: (xMax + xMin) / 2, y: (yMax + yMin) / 2 }); }); /***********************************************************************************/ /********************************** FRAME MASK CLASS *************************/ /***********************************************************************************/ var FrameMask = Container.expand(function () { var self = Container.call(this); var top = self.attachAsset('line', { anchorX: 0.5, anchorY: 0.5, x: 2048 / 2, y: yMin / 2, width: 2048, height: yMin, tint: isDebug ? 0xFF0000 : 0xAEC6CF // Red tint in debug mode }); var left = self.attachAsset('line', { anchorX: 0.5, anchorY: 0.5, x: xMin / 2, y: 2732 / 2, width: xMin, height: 2732, tint: isDebug ? 0x00FF00 : 0xAEC6CF // Green tint in debug mode }); var bottom = self.attachAsset('line', { anchorX: 0.5, anchorY: 0.5, x: 2048 / 2, y: (2732 + yMax) / 2, width: 2048, height: 2732 - yMax, tint: isDebug ? 0x0000FF : 0xAEC6CF // Blue tint in debug mode }); var right = self.attachAsset('line', { anchorX: 0.5, anchorY: 0.5, x: (2048 + xMax) / 2, y: 2732 / 2, width: 2048 - xMax, height: 2732, tint: isDebug ? 0xFFFF00 : 0xAEC6CF // Yellow tint in debug mode }); self.addChild(top); self.addChild(left); self.addChild(bottom); self.addChild(right); }); /***********************************************************************************/ /********************************** MOVING TARGET CLASS ************************************/ /***********************************************************************************/ var MovingTarget = Container.expand(function () { var self = Container.call(this); var birdAssets = ['bird1', 'bird2', 'bird3']; currentTargetAsset = birdAssets[Math.floor(Math.random() * birdAssets.length)]; var targetGraphics = self.attachAsset(currentTargetAsset, { anchorX: 0.5, anchorY: 0.5 }); self.speedX = 10; self.update = function () { if (!isPlaying) { return; } self.x += self.speedX; self.y = Math.max(yMin, Math.min(self.y, yMax)); if (self.x > 2048 + self.width) { self.destroy(); cleanPlayingState(); initResultState(); } }; }); /***********************************************************************************/ /********************************** PHOTOFRAME CLASS ************************************/ /***********************************************************************************/ var PhotoFrame = Container.expand(function () { var self = Container.call(this); var frameBorderTop = self.attachAsset('line', { anchorX: 0.5, anchorY: 0.5 }); frameBorderTop.width = xMax - xMin + 16; frameBorderTop.height = 20; frameBorderTop.alpha = 1.0; frameBorderTop.x = (xMax + xMin) / 2; frameBorderTop.y = yMin; var frameBorderRight = self.attachAsset('line', { anchorX: 0.5, anchorY: 0.5, tint: 0xFFFFFF // Grey color }); frameBorderRight.width = 20; frameBorderRight.height = yMax - yMin; frameBorderRight.alpha = 1.0; frameBorderRight.x = xMax; frameBorderRight.y = (yMax + yMin) / 2; var frameBorderBottom = self.attachAsset('line', { anchorX: 0.5, anchorY: 0.5, tint: 0xFFFFFF // Grey color }); frameBorderBottom.width = xMax - xMin + 20; frameBorderBottom.height = 20; frameBorderBottom.alpha = 1.0; frameBorderBottom.x = (xMax + xMin) / 2; frameBorderBottom.y = yMax; var frameBorderLeft = self.attachAsset('line', { anchorX: 0.5, anchorY: 0.5 }); frameBorderLeft.width = 20; frameBorderLeft.height = yMax - yMin; frameBorderLeft.alpha = 1.0; frameBorderLeft.x = xMin; frameBorderLeft.y = (yMax + yMin) / 2; }); /***********************************************************************************/ /********************************** PHOTOFRAMESHADOW CLASS *************************/ /***********************************************************************************/ var PhotoFrameShadow = Container.expand(function () { var self = Container.call(this); for (var i = 0; i < 10; i++) { var shadowRight = self.attachAsset('line', { anchorX: 0.5, anchorY: 0.5, tint: 0x000000 // Red color for debugging }); shadowRight.width = 20 + i * 2; // Increase width by i*2 shadowRight.height = yMax - yMin + 30; shadowRight.alpha = 0.1; shadowRight.x = xMax + 50 + 28; // Set the same x for all shadowRight shadowRight.y = (yMax + yMin) / 2 + 30; self.addChild(shadowRight); } for (var i = 0; i < 10; i++) { var shadowBottom = self.attachAsset('line', { anchorX: 0.5, anchorY: 0.5, tint: 0x000000 // Red color for debugging }); shadowBottom.width = xMax - xMin + 10; shadowBottom.height = 20 + i * 2; // Increase height by i*2 shadowBottom.alpha = 0.1; shadowBottom.x = (xMax + xMin) / 2 + 15; shadowBottom.y = yMax + 30; // Set the same y for all shadowBottom self.addChild(shadowBottom); } }); /***********************************************************************************/ /********************************** SHOTBUTTON CLASS ************************************/ /***********************************************************************************/ var ShotButton = Container.expand(function () { var self = Container.call(this); var circle1 = self.attachAsset('shotButton', { anchorX: 0.5, anchorY: 0.5 }); var circle2 = self.attachAsset('shotButton', { anchorX: 0.5, anchorY: 0.5, tint: 0x000000, scaleX: 0.9, scaleY: 0.9 }); var circle3 = self.attachAsset('shotButton', { anchorX: 0.5, anchorY: 0.5, scaleX: 0.85, scaleY: 0.85 }); }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0xAEC6CF //Init game with pastel blue background }); /**** * Game Code ****/ // Enumeration for game states /****************************************************************************************** */ /************************************** GLOBAL VARIABLES ********************************** */ /****************************************************************************************** */ var GAME_STATE = { INIT: 'INIT', NEW_ROUND: 'NEW_ROUND', PLAYING: 'PLAYING', RESULT: 'RESULT', SCORE: 'SCORE' }; // Game state variables var gameState = GAME_STATE.INIT; var isPlaying = false; var score = 0; var hasShot = false; var targetShotX = 0; var targetShotY = 0; // Photo limits variables var xMin = 256; var xMax = 2048 - 256; var yMin = 700; var yMax = 2732 - 700; // Game elements variables var frameMask; var photoFrame; var photoFrameBackground; var background; var cameraHUD; var currentTarget; var currentTargetAsset; var shotButton; // Game layer variables var photoFrameShadow; var backgroundLayer; var foregroundLayer; // Result target variable var resultTarget; // UI variables var scoreTxt; var readyText; // Debug variables var isDebug = false; var debugMarker; var debugText; /****************************************************************************************** */ /*********************************** UTILITY FUNCTIONS ************************************ */ /****************************************************************************************** */ function log() { if (isDebug) { var _console; (_console = console).log.apply(_console, arguments); } } /****************************************************************************************** */ /************************************** INPUT HANDLERS ************************************ */ /****************************************************************************************** */ game.down = function (x, y, obj) { switch (gameState) { case GAME_STATE.NEW_ROUND: gameNewRoundDown(x, y, obj); break; case GAME_STATE.PLAYING: gamePlayingDown(x, y, obj); break; case GAME_STATE.RESULT: gameResultDown(x, y, obj); case GAME_STATE.SCORE: gameScoreDown(x, y, obj); break; } }; function gameNewRoundDown(x, y, obj) { log("gameNewRoundDown..."); cleanNewRoundState(); //initPlayingState(); // TEMP DEBUG cleanPlayingState(); initResultState(); } function gamePlayingDown(x, y, obj) { if (hasShot) { return; } hasShot = true; log("gamePlayingDown..."); LK.getSound('cameraShot').play(); targetShotX = currentTarget.x; targetShotY = currentTarget.y; // Add a black flash effect LK.effects.flashScreen(0x000000, 1000); // Flash duration of 1000ms } function gameResultDown(x, y, obj) { log("gameResultDown..."); cleanResultState(); } function gameScoreDown(x, y, obj) { log("gameScoreDown..."); cleanScoreState(); } /****************************************************************************************** */ /************************************* GAME STATES **************************************** */ /****************************************************************************************** */ function gameInitialize() { log("Game initialize..."); background = LK.getAsset('background', { anchorX: 0, anchorY: 0, x: 0, y: 0 }); backgroundLayer = new Container(); foregroundLayer = new Container(); cameraHUD = new CameraHUD(); photoFrameBackground = new FrameBackground(); photoFrameBackground.visible = false; photoFrame = new PhotoFrame(); photoFrameShadow = new PhotoFrameShadow(); frameMask = new FrameMask(); frameMask.visible = false; photoFrameBackground.visible = false; game.addChild(backgroundLayer); game.addChild(foregroundLayer); backgroundLayer.addChild(background); backgroundLayer.addChild(photoFrameBackground); backgroundLayer.addChild(cameraHUD); foregroundLayer.addChild(frameMask); foregroundLayer.addChild(photoFrame); foregroundLayer.addChild(frameMask); foregroundLayer.addChild(photoFrameShadow); // UI Elements score = 0; scoreTxt = new Text2('Score: ' + score, { size: 100, fill: "#ffffff" }); scoreTxt.anchor.set(0.5, 0); LK.gui.top.addChild(scoreTxt); shotButton = new ShotButton(); shotButton.x = 1024; shotButton.y = 2500; game.addChild(shotButton); if (isDebug) { debugMarker = LK.getAsset('debugMarker', { anchorX: 0.5, anchorY: 0.5, x: 2048 / 2, y: 2732 - 50 }); game.addChild(debugMarker); debugText = new Text2('Debug Info', { size: 50, fill: "#ffffff" }); debugText.anchor.set(0.5, 1); // Anchor to the bottom-right LK.gui.bottom.addChild(debugText); } initNewRoundState(); } /**************************************** NEW ROUND STATE *********************************/ function initNewRoundState() { log("initNewRoundState..."); background.visible = true; gameState = GAME_STATE.NEW_ROUND; // TODO : handle Level change and target change currentTarget = new MovingTarget(); currentTarget.x = -currentTarget.width; // Spawn out of the screen on the left currentTarget.y = 1366 - 256 + 512 * Math.random(); // Random vertical position backgroundLayer.addChild(currentTarget); if (!readyText) { readyText = new Text2('Listen...', { size: 200, fill: "#ffffff" }); readyText.anchor.set(0.5, 0.5); // Center the text horizontally and vertically readyText.x = 2048 / 2; // Center horizontally readyText.y = 2732 / 2; // Center vertically game.addChild(readyText); } readyText.visible = true; photoFrame.visible = false; LK.getSound('forestSound').play(); LK.setTimeout(function () { cleanNewRoundState(); initPlayingState(); }, 3000); } function handleNewRoundLoop() { // Update New round elements } function cleanNewRoundState() { log("cleanNewRoundState..."); // Remove New round elements readyText.visible = false; } /**************************************** PLAYING STATE *********************************/ function initPlayingState() { log("initPlayingState..."); gameState = GAME_STATE.PLAYING; isPlaying = true; hasShot = false; } function handlePlayingLoop() { // Update game elements } function cleanPlayingState() { log("cleanPlayingState..."); isPlaying = false; // Remove game elements background.visible = false; cameraHUD.visible = false; } /**************************************** RESULT STATE *********************************/ function initResultState() { log("initResultState..."); shotButton.visible = false; frameMask.visible = true; foregroundLayer.addChildAt(frameMask, 0); gameState = GAME_STATE.RESULT; photoFrame.visible = true; photoFrameBackground.visible = true; background.tint = 0x000000; // Set background to black // Show the target again at the shot position if within limits if (targetShotX >= xMin - currentTarget.width / 2 && targetShotX <= xMax + currentTarget.width / 2 && targetShotY >= yMin - currentTarget.height / 2 && targetShotY <= yMax + currentTarget.height / 2) { resultTarget = new Container(); var resultTargetGraphics = resultTarget.attachAsset(currentTargetAsset, { anchorX: 0.5, anchorY: 0.5 }); resultTarget.x = targetShotX; resultTarget.y = targetShotY; backgroundLayer.addChild(resultTarget); } // Calculate the center of the photo frame var centerX = (xMin + xMax) / 2; var centerY = (yMin + yMax) / 2; // Calculate the distance between the target shot and the center var distance = Math.sqrt(Math.pow(targetShotX - centerX, 2) + Math.pow(targetShotY - centerY, 2)); // Calculate the maximum possible distance (from center to any corner) var maxDistance = Math.sqrt(Math.pow((xMax - xMin) / 2, 2) + Math.pow((yMax - yMin) / 2, 2)); // Calculate the score (0 to 100) var shotScore = Math.max(0, 100 - distance / maxDistance * 100); // Update the score score += Math.round(shotScore); scoreTxt.setText('Score: ' + score); } function handleResultLoop() { // Update result elements } function cleanResultState() { log("cleanResultState..."); frameMask.visible = false; scoreTxt.visible = false; photoFrameBackground.visible = false; foregroundLayer.removeChild(frameMask); shotButton.visible = true; if (resultTarget) { backgroundLayer.removeChild(resultTarget); resultTarget = null; } // Remove result elements initNewRoundState(); } /**************************************** SCORE STATE *********************************/ function initScoreState() { log("initScoreState..."); gameState = GAME_STATE.SCORE; } function handleScoreLoop() { // Update score elements } function cleanScoreState() { log("cleanScoreState..."); scoreTxt.setText('Score: ' + score); LK.showGameOver(); } /***********************************************************************************/ /******************************** MAIN GAME LOOP ***********************************/ /***********************************************************************************/ game.update = function () { currentTarget.update(); switch (gameState) { case GAME_STATE.NEW_ROUND: handleNewRoundLoop(); break; case GAME_STATE.PLAYING: handlePlayingLoop(); break; case GAME_STATE.SCORE: handleScoreLoop(); break; } }; gameInitialize(); // Initialize the game
===================================================================
--- original.js
+++ change.js
@@ -178,12 +178,12 @@
anchorX: 0.5,
anchorY: 0.5,
tint: 0x000000 // Red color for debugging
});
- shadowRight.width = 40 + i * 2; // Increase width by i*2
- shadowRight.height = yMax - yMin - 5;
+ shadowRight.width = 20 + i * 2; // Increase width by i*2
+ shadowRight.height = yMax - yMin + 30;
shadowRight.alpha = 0.1;
- shadowRight.x = xMax + 35; // Set the same x for all shadowRight
+ shadowRight.x = xMax + 50 + 28; // Set the same x for all shadowRight
shadowRight.y = (yMax + yMin) / 2 + 30;
self.addChild(shadowRight);
}
for (var i = 0; i < 10; i++) {
@@ -191,13 +191,13 @@
anchorX: 0.5,
anchorY: 0.5,
tint: 0x000000 // Red color for debugging
});
- shadowBottom.width = xMax - xMin + 30;
- shadowBottom.height = 40 + i * 2; // Increase height by i*2
+ shadowBottom.width = xMax - xMin + 10;
+ shadowBottom.height = 20 + i * 2; // Increase height by i*2
shadowBottom.alpha = 0.1;
- shadowBottom.x = (xMax + xMin) / 2 + 40;
- shadowBottom.y = yMax + 40; // Set the same y for all shadowBottom
+ shadowBottom.x = (xMax + xMin) / 2 + 15;
+ shadowBottom.y = yMax + 30; // Set the same y for all shadowBottom
self.addChild(shadowBottom);
}
});
/***********************************************************************************/
@@ -233,12 +233,12 @@
/****
* Game Code
****/
+// Enumeration for game states
/****************************************************************************************** */
/************************************** GLOBAL VARIABLES ********************************** */
/****************************************************************************************** */
-// Enumeration for game states
var GAME_STATE = {
INIT: 'INIT',
NEW_ROUND: 'NEW_ROUND',
PLAYING: 'PLAYING',
a forest.
flying Red-bellied Woodpecker.
flying Yellow-headed Blackbird.
flying Painted Bunting.
Underwater. only water and corals. NO animals
Countryside. 1 flower in foreground.
A Butterfly flying.
a fish swimming.
full dragonfly flying to the right.
full drone flying to the right.
a full hot air balloon with a basket flying to the right.
roofs of an empty modern city. day light
a satellite.
stary dark space. NO OBJECTS
a multitude of polaroids in bulk, with photos of birds, fishes, butterflies, planes, hot air baloons, satelites, dragonflies.....
A flying owl.
A flying parrot.
hippocampe.
shark. lateral view
diodon hystrix swimming. lateral view
fighting fish swimming. lateral view
a hang glider flying. full lateral view
un cerf-volant multicolore.
une coccinelle volante.
un scarabée vert irisé volant. side view
une gueppe volante. side view
un astronaute volant. full side view
une navette spaciale volante. full side view
un astéroïde volant dans l'espace. full side view
remove