User prompt
Arka plan için de asset oluştur
User prompt
Zemin hareketini iptal et
User prompt
Daha akıcı bir şekilde ayarla
User prompt
Zemini de oyunla beraber sola kaydır
User prompt
Ve bunu yan yana tüm ekrana yetecek kadar çoğalt
User prompt
Zemini tam kare yap ve ekranın alt kısmına sığdır
User prompt
Kaktüs görselini biraz daha büyüt
User prompt
Zemini ekranın alt kısmına kadar genişlet
User prompt
Oyunu biraz yavaşlat
User prompt
Oyunu oluştur
User prompt
Oyun neden açılmıyor
Code edit (1 edits merged)
Please save this source code
User prompt
Dino Run: Sonsuz Koşu
Initial prompt
Chromedaki dinazor oyunu gibi bir oyun yapmak istiyorum
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); var storage = LK.import("@upit/storage.v1", { highScore: 0 }); /**** * Classes ****/ // Dino (player) class var Dino = Container.expand(function () { var self = Container.call(this); var dinoSprite = self.attachAsset('dino', { anchorX: 0.5, anchorY: 1 }); self.width = dinoSprite.width; self.height = dinoSprite.height; self.isJumping = false; self.isDucking = false; self.velocityY = 0; self.gravity = 2.2; self.jumpStrength = -48; self.groundY = 0; // Will be set after creation // Jump method self.jump = function () { if (!self.isJumping && !self.isDucking) { self.velocityY = self.jumpStrength; self.isJumping = true; } }; // Duck method self.duck = function () { if (!self.isJumping && !self.isDucking) { self.isDucking = true; // Animate duck (shrink height, move down) tween(self, { scaleY: 0.55, y: self.y + self.height * 0.45 }, { duration: 120, easing: tween.cubicIn }); } }; // Stand up from duck self.stand = function () { if (self.isDucking) { self.isDucking = false; tween(self, { scaleY: 1, y: self.groundY }, { duration: 120, easing: tween.cubicOut }); } }; // Update method self.update = function () { // Jumping physics if (self.isJumping) { self.y += self.velocityY; self.velocityY += self.gravity; if (self.y >= self.groundY) { self.y = self.groundY; self.velocityY = 0; self.isJumping = false; } } }; return self; }); // Obstacle base class var Obstacle = Container.expand(function () { var self = Container.call(this); self.speed = 0; // Will be set on spawn self.type = 'cactus'; // cactus, rock, bird self.passed = false; // For scoring self.update = function () { self.x -= self.speed; }; return self; }); // Rock var Rock = Obstacle.expand(function () { var self = Obstacle.call(this); var rockSprite = self.attachAsset('rock', { anchorX: 0.5, anchorY: 1 }); self.width = rockSprite.width; self.height = rockSprite.height; self.type = 'rock'; return self; }); // Cactus var Cactus = Obstacle.expand(function () { var self = Obstacle.call(this); var cactusSprite = self.attachAsset('cactus', { anchorX: 0.5, anchorY: 1 }); self.width = cactusSprite.width; self.height = cactusSprite.height; self.type = 'cactus'; return self; }); // Bird var Bird = Obstacle.expand(function () { var self = Obstacle.call(this); var birdSprite = self.attachAsset('bird', { anchorX: 0.5, anchorY: 1 }); self.width = birdSprite.width; self.height = birdSprite.height; self.type = 'bird'; // Bird flies at random heights self.flyY = 0; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0xffffff }); /**** * Game Code ****/ // Add background image (fills the game area) var background = LK.getAsset('background', { anchorX: 0, anchorY: 0, x: 0, y: 0, width: 2048, height: 2732 }); game.addChild(background); // Ground // Bird obstacle // Rock obstacle // Cactus obstacle // Dino (player) // Game constants var GROUND_Y = 2300; var DINO_START_X = 400; var OBSTACLE_MIN_GAP = 600; var OBSTACLE_MAX_GAP = 1100; var OBSTACLE_TYPES = ['cactus', 'rock', 'bird']; var GAME_SPEED_START = 12; var GAME_SPEED_MAX = 28; var GAME_SPEED_INC = 0.00022; // Per tick var BIRD_HEIGHTS = [GROUND_Y - 120, GROUND_Y - 320, GROUND_Y - 520]; // Game state var dino; var ground; var obstacles = []; var score = 0; var highScore = storage.highScore || 0; var distance = 0; var gameSpeed = GAME_SPEED_START; var lastObstacleX = 0; var isGameOver = false; var scoreTxt, highScoreTxt; // Add ground // Make the ground a perfect square and fit it to the bottom of the screen var groundSize = Math.min(2048, 2732 - GROUND_Y); // Tile the ground square horizontally to fill the screen width var groundTiles = []; var numTiles = Math.ceil(2048 / groundSize); for (var i = 0; i < numTiles; i++) { var groundTile = LK.getAsset('ground', { anchorX: 0, anchorY: 0, x: i * groundSize, y: 2732 - groundSize, width: groundSize, height: groundSize }); game.addChild(groundTile); groundTiles.push(groundTile); } // For compatibility, keep a reference to the first ground tile as 'ground' ground = groundTiles[0]; // Add dino dino = new Dino(); dino.x = DINO_START_X; dino.groundY = GROUND_Y; dino.y = GROUND_Y; game.addChild(dino); // Score text scoreTxt = new Text2('0', { size: 110, fill: "#222" }); scoreTxt.anchor.set(0.5, 0); LK.gui.top.addChild(scoreTxt); // High score text highScoreTxt = new Text2('En Yüksek: ' + highScore, { size: 60, fill: "#888" }); highScoreTxt.anchor.set(0.5, 0); LK.gui.top.addChild(highScoreTxt); highScoreTxt.y = 120; // Helper: spawn obstacle function spawnObstacle() { var typeIdx = Math.floor(Math.random() * OBSTACLE_TYPES.length); var type = OBSTACLE_TYPES[typeIdx]; var obs; if (type === 'cactus') { obs = new Cactus(); obs.y = GROUND_Y; } else if (type === 'rock') { obs = new Rock(); obs.y = GROUND_Y; } else if (type === 'bird') { obs = new Bird(); var hIdx = Math.floor(Math.random() * BIRD_HEIGHTS.length); obs.y = BIRD_HEIGHTS[hIdx]; obs.flyY = obs.y; } obs.x = 2048 + obs.width; obs.speed = gameSpeed; // Defensive: initialize lastX and lastY for event/collision best practices obs.lastX = obs.x; obs.lastY = obs.y; obstacles.push(obs); game.addChild(obs); lastObstacleX = obs.x; } // Helper: reset game function resetGame() { // Remove obstacles for (var i = 0; i < obstacles.length; i++) { obstacles[i].destroy(); } obstacles = []; score = 0; distance = 0; gameSpeed = GAME_SPEED_START; lastObstacleX = 0; isGameOver = false; dino.x = DINO_START_X; dino.y = GROUND_Y; dino.groundY = GROUND_Y; dino.velocityY = 0; dino.isJumping = false; dino.isDucking = false; dino.scaleY = 1; dino.lastX = dino.x; dino.lastY = dino.y; scoreTxt.setText('0'); highScoreTxt.setText('En Yüksek: ' + highScore); } // Touch/press: jump or duck var touchStartY = null; var touchActive = false; game.down = function (x, y, obj) { if (isGameOver) return; touchStartY = y; touchActive = true; }; game.move = function (x, y, obj) { if (isGameOver) return; if (!touchActive) return; // If swipe up, jump if (touchStartY !== null && y < touchStartY - 80) { dino.jump(); touchActive = false; } // If swipe down, duck if (touchStartY !== null && y > touchStartY + 80) { dino.duck(); touchActive = false; } }; game.up = function (x, y, obj) { if (isGameOver) return; dino.stand(); touchStartY = null; touchActive = false; }; // Main update loop game.update = function () { if (isGameOver) return; // Defensive: track dino's lastX and lastY for event/collision best practices if (dino.lastX === undefined) dino.lastX = dino.x; if (dino.lastY === undefined) dino.lastY = dino.y; // Update dino dino.update(); // Ground tiles remain static; no movement for (var g = 0; g < groundTiles.length; g++) { var tile = groundTiles[g]; tile.x = g * groundSize; } // Update obstacles for (var i = obstacles.length - 1; i >= 0; i--) { var obs = obstacles[i]; // Defensive: track lastX and lastY for event/collision best practices if (obs.lastX === undefined) obs.lastX = obs.x; if (obs.lastY === undefined) obs.lastY = obs.y; obs.speed = gameSpeed; obs.update(); // Bird: simple up-down movement if (obs.type === 'bird') { obs.y = obs.flyY + Math.sin(LK.ticks / 12 + i) * 18; } // Remove if off screen if (obs.x < -obs.width) { obs.destroy(); obstacles.splice(i, 1); continue; } // Scoring: passed dino if (!obs.passed && obs.x + obs.width / 2 < dino.x - dino.width / 2) { obs.passed = true; score += 1; scoreTxt.setText('' + score); } // Collision if (dino.intersects(obs)) { // If ducking and bird, allow pass if (obs.type === 'bird' && dino.isDucking && obs.y > dino.y - dino.height * 0.7) { continue; } // Game over isGameOver = true; LK.effects.flashScreen(0xff0000, 800); if (score > highScore) { highScore = score; storage.highScore = highScore; } LK.setTimeout(function () { LK.showGameOver(); }, 900); return; } } // After all movement, update lastX and lastY for obstacles for (var j = 0; j < obstacles.length; j++) { obstacles[j].lastX = obstacles[j].x; obstacles[j].lastY = obstacles[j].y; } // Update dino's lastX and lastY dino.lastX = dino.x; dino.lastY = dino.y; // Increase game speed if (gameSpeed < GAME_SPEED_MAX) { gameSpeed += GAME_SPEED_INC * (1 + score * 0.04); if (gameSpeed > GAME_SPEED_MAX) gameSpeed = GAME_SPEED_MAX; } // Distance for score distance += gameSpeed; // Spawn new obstacle if (obstacles.length === 0 || 2048 - lastObstacleX > OBSTACLE_MIN_GAP + Math.random() * (OBSTACLE_MAX_GAP - OBSTACLE_MIN_GAP)) { spawnObstacle(); } }; // Listen for game over to reset LK.on('gameover', function () { resetGame(); }); // Listen for you win (not used, but for completeness) LK.on('youwin', function () { resetGame(); });
===================================================================
--- original.js
+++ change.js
@@ -132,8 +132,18 @@
/****
* Game Code
****/
+// Add background image (fills the game area)
+var background = LK.getAsset('background', {
+ anchorX: 0,
+ anchorY: 0,
+ x: 0,
+ y: 0,
+ width: 2048,
+ height: 2732
+});
+game.addChild(background);
// Ground
// Bird obstacle
// Rock obstacle
// Cactus obstacle
3d pixar tarzı kanat çırpan kuş yandan. In-Game asset. 2d. High contrast. No shadows
3d pixar tarzı kirpi yandan bakış. In-Game asset. 2d. High contrast. No shadows
Oyun arka planı gökyüzü 3d pixar. In-Game asset. 2d. High contrast. No shadows
Garip bir oyun karakteri 3d pixar tarzı. In-Game asset. 2d. High contrast. No shadows