User prompt
Oyunun adını A Very Simple Tank Battle olarak değiştir oyunun yazısını ekranın üst orta kısmına yerleştir
User prompt
Oyunun yazısının arkaplanının bir assetini oluştur
User prompt
oyunun ismini Simple Tank War olarak değiştir oyunun yazısının arkasına bir arkaplan oluştur ve yazıyı ekranın orta üst kısmına yerleştir.
User prompt
Oyunun adını Epic Tank War Olarak değiştir
User prompt
Play yazısının yazı fontunu "KALIN" bunun gibi yap
User prompt
Play yazısının yazı fontunu "KALIN" bunun gibi yap
User prompt
Play yazısının yazı tipini "KALIN" bu şekilde yap
User prompt
Start Game butonunun içindeki yazıyı Play olarak değiştir
User prompt
Giriş ekranında Oyunun İsmi "Araba Savaşı" ve Start Game butonu dışında diğer şeyler oyun başladıktan sonra gözüksün
User prompt
Bir giriş ekranı olsun oyun hemen başlamasın. Start Game butonu olsun. Butona tıkladıktan sonra oyun başlasın.
User prompt
Please fix the bug: 'PlayerCar is not defined' in or related to this line: 'return self;' Line Number: 83
User prompt
Please fix the bug: 'PlayerCar is not defined' in or related to this line: 'var player = new PlayerCar();' Line Number: 110
User prompt
Please fix the bug: 'StartButton is not defined' in or related to this line: 'var txt = new Text2("Start Game", {' Line Number: 39
User prompt
Please fix the bug: 'StartButton is not defined' in or related to this line: 'var startButton = new StartButton({' Line Number: 47
User prompt
Bir giriş ekranı olsun oyun hemen başlamasın "Start Game" butonu olsun butona tıkladığında oyun başlasın.Start Game butonuna bastıktan sonra arabalar gelmeye başlasın. Giriş ekranında sadece "Start Game" butonu olsun. Bu butonun bir assetini oluştur ve boyutunu ve rengini değiştirebiliyim
User prompt
Bir giriş ekranı olsun oyun hemen başlamasın "Start Game" butonu olsun butona tıkladığında oyun başlasın.
User prompt
Bir giriş ekranı olsun oyun hemen başlamasın "Start Game" butonu olsun butona tıkladığında oyun başlasın.
User prompt
Please fix the bug: 'Cannot read properties of undefined (reading 'length')' in or related to this line: 'if (typeof enemies !== "undefined" && enemies && enemies.length) {' Line Number: 341
User prompt
Please fix the bug: 'Cannot read properties of undefined (reading 'length')' in or related to this line: 'for (var i = 0; i < enemies.length; i++) {' Line Number: 341
User prompt
Please fix the bug: 'Cannot set properties of undefined (setting 'visible')' in or related to this line: 'scoreTxt.visible = visible;' Line Number: 322
User prompt
Start Game yazısının bir assetini oluştur
User prompt
Please fix the bug: 'Cannot read properties of undefined (reading 'length')' in or related to this line: 'for (var i = 0; i < bullets.length; i++) {' Line Number: 348
User prompt
Please fix the bug: 'Cannot read properties of undefined (reading 'length')' in or related to this line: 'if (typeof enemies !== "undefined" && enemies && typeof enemies.length !== "undefined") {' Line Number: 341
User prompt
Please fix the bug: 'Cannot read properties of undefined (reading 'length')' in or related to this line: 'for (var i = 0; i < enemies.length; i++) {' Line Number: 341
User prompt
Please fix the bug: 'Cannot set properties of undefined (setting 'visible')' in or related to this line: 'if (typeof scoreTxt !== "undefined" && scoreTxt) {' Line Number: 322
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); /**** * Classes ****/ // PlayerCar class for the player-controlled car var PlayerCar = Container.expand(function () { var self = Container.call(this); // Attach player car asset, centered var car = self.attachAsset('playerCar', { anchorX: 0.5, anchorY: 0.5 }); // Direction vector (normalized) self.dirX = 0; self.dirY = -1; // Movement speed self.speed = 18; // Shooting cooldown (frames) self.shootCooldown = 0; // For shoot boost self._shootBoostActive = false; self._shootBoostTicks = 0; // Set direction to move toward (targetX, targetY) self.setDirection = function (targetX, targetY) { var dx = targetX - self.x; var dy = targetY - self.y; var len = Math.sqrt(dx * dx + dy * dy); if (len > 0.01) { self.dirX = dx / len; self.dirY = dy / len; } }; // Set boost (not used in MVP, but placeholder) self.setBoost = function (active) { // No-op for now }; // Update method called every frame self.update = function () { // Move if playerIsMoving is true (global) if (typeof playerIsMoving !== "undefined" && playerIsMoving) { var moveSpeed = self.speed; self.x += self.dirX * moveSpeed; self.y += self.dirY * moveSpeed; // Clamp to game area if (self.x < 100) self.x = 100; if (self.x > 2048 - 100) self.x = 2048 - 100; if (self.y < 100) self.y = 100; if (self.y > 2732 - 100) self.y = 2732 - 100; } // Handle shoot cooldown if (self.shootCooldown > 0) { self.shootCooldown--; } }; // Initial position (centered) self.x = 2048 / 2; self.y = 2732 - 400; return self; }); // StartButton class for customizable start game button var StartButton = Container.expand(function (opts) { var self = Container.call(this); // Default options opts = opts || {}; var width = typeof opts.width === "number" ? opts.width : 600; var height = typeof opts.height === "number" ? opts.height : 200; var color = typeof opts.color === "number" ? opts.color : 0x2980ff; // Create button background asset var bg = self.attachAsset('startButton', { width: width, height: height, color: color, anchorX: 0.5, anchorY: 0.5 }); // Create button text var txt = new Text2("Start Game", { size: Math.floor(height * 0.45), fill: 0xFFFFFF }); txt.anchor.set(0.5, 0.5); txt.x = 0; txt.y = 0; self.addChild(txt); // Enable touch/click self.interactive = true; self.buttonMode = true; // Down event triggers onStart if defined self.down = function (x, y, obj) { if (typeof self.onStart === "function") { self.onStart(); } }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x222222 }); /**** * Game Code ****/ // Customizable Start Game button asset // New background asset // Add background image to the game // Asset for the box dropped by BossCar on death var background = LK.getAsset('background', { anchorX: 0.5, anchorY: 0.5, x: 2048 / 2, y: 2732 / 2 }); game.addChild(background); // --- Start Screen State --- var gameStarted = false; // Hide gameplay UI until game starts var scoreTxt, levelTxt, timerTxt; var guiRowY = 10; var guiSpacing = 80; // horizontal space between counters // Create StartButton and center it var startButton = new StartButton({ width: 600, height: 200, color: 0x2980ff }); startButton.x = 2048 / 2; startButton.y = 2732 / 2; game.addChild(startButton); // When StartButton is pressed, start the game startButton.onStart = function () { // Remove start button startButton.destroy(); gameStarted = true; // Show gameplay UI LK.gui.top.addChild(scoreTxt); LK.gui.top.addChild(levelTxt); LK.gui.top.addChild(timerTxt); // Enable controller and player game.addChild(player); game.addChild(controllerBg); game.addChild(controllerKnob); }; // --- Gameplay UI (created here, added to GUI only after game starts) --- var player = new PlayerCar(); var enemies = []; var bullets = []; // Boss state var bossSpawned = false; var bossCar = null; // Score var score = 0; var level = 1; scoreTxt = new Text2('Score: 0', { size: 97.2, fill: 0xFFFFFF }); scoreTxt.anchor.set(1, 0); // right align score // Level text (centered between score and timer) levelTxt = new Text2('Level 1', { size: 100, fill: 0xFFD700 // gold color for level }); levelTxt.anchor.set(0.5, 0); // center align // Timer text (elapsed time in seconds, right of score) timerTxt = new Text2('0:00', { size: 99, fill: 0xFFFFFF }); timerTxt.anchor.set(0, 0); // left align timer // Arrange score, level, and timer in a single horizontal row, evenly spaced var totalWidth = scoreTxt.width + levelTxt.width + timerTxt.width + 2 * guiSpacing; var startX = LK.gui.top.width / 2 - totalWidth / 2; // Score counter (left) scoreTxt.x = startX + scoreTxt.width; scoreTxt.y = guiRowY; // Level counter (center) levelTxt.x = scoreTxt.x + guiSpacing + levelTxt.width / 2; levelTxt.y = guiRowY; // Timer counter (right) timerTxt.x = levelTxt.x + levelTxt.width / 2 + guiSpacing; timerTxt.y = guiRowY; // For pointer tracking (controller-based) var pointerX = 2048 / 2; var pointerY = 2732 / 2; var playerIsMoving = false; // Start as not moving // For boost var boosting = false; // --- Controller UI --- // Controller is a circular area at the bottom center of the screen var controllerRadius = 170; var controllerCenterX = 2048 / 2; var controllerCenterY = 2732 - controllerRadius - 60; // Controller visual (semi-transparent circle) var controllerBg = LK.getAsset('centerCircle', { anchorX: 0.5, anchorY: 0.5, width: controllerRadius * 2, height: controllerRadius * 2, color: 0x888888, alpha: 0.25, x: controllerCenterX, y: controllerCenterY }); // Controller knob (shows current direction) var knobRadius = 80; var controllerKnob = LK.getAsset('centerCircle', { anchorX: 0.5, anchorY: 0.5, width: knobRadius * 2, height: knobRadius * 2, color: 0x2980ff, alpha: 0.7, x: controllerCenterX, y: controllerCenterY }); // Controller and player are only added to game after start // Track controller state var controllerActive = false; var controllerTouchId = null; // Persistent controller direction for continuous movement var lastControllerActive = false; var lastControllerDirX = 0; var lastControllerDirY = 0; // Helper: get distance between two points function dist2(x1, y1, x2, y2) { var dx = x1 - x2; var dy = y1 - y2; return Math.sqrt(dx * dx + dy * dy); } // For enemy spawn timer var enemySpawnTicks = 0; // Dynamic spawn interval variables var ENEMY_SPAWN_INTERVAL_START = 180; // 3 seconds at 60fps var ENEMY_SPAWN_INTERVAL_END = 60; // 1 second at 60fps var ENEMY_SPAWN_INTERVAL = ENEMY_SPAWN_INTERVAL_START; // Timer for game progression (in ticks) var gameTimerTicks = 0; var GAME_TIMER_MAX = 60 * 60; // 60 seconds to reach max difficulty // --- Event Handlers --- // Move: handle controller input only if inside controller area function handleMove(x, y, obj) { // Prevent controller input before game starts if (!gameStarted) return; // Only respond to touches inside controller area or if already dragging controller var isTouch = obj && obj.event && typeof obj.event.identifier !== "undefined"; var touchId = isTouch ? obj.event.identifier : null; // If not already active, only activate if touch is inside controller if (!controllerActive) { var d = dist2(x, y, controllerCenterX, controllerCenterY); if (d <= controllerRadius) { controllerActive = true; controllerTouchId = touchId; } else { // Ignore touches outside controller return; } } else { // If already active, only respond to the same touch if (isTouch && controllerTouchId !== null && touchId !== controllerTouchId) { return; } } // Calculate direction from controller center to touch var dx = x - controllerCenterX; var dy = y - controllerCenterY; var len = Math.sqrt(dx * dx + dy * dy); // Clamp knob to controller radius var knobX = controllerCenterX; var knobY = controllerCenterY; if (len > controllerRadius) { dx = dx * controllerRadius / len; dy = dy * controllerRadius / len; knobX += dx; knobY += dy; } else { knobX = x; knobY = y; } controllerKnob.x = knobX; controllerKnob.y = knobY; // If movement is significant, set direction and move if (len > 30) { // Move player in the direction of the knob relative to controller center player.setDirection(player.x + dx, player.y + dy); playerIsMoving = true; // Store last direction for persistent movement lastControllerDirX = dx / len; lastControllerDirY = dy / len; lastControllerActive = true; } else { playerIsMoving = false; lastControllerActive = false; } if (typeof LK !== "undefined" && typeof LK.ticks !== "undefined") { lastMoveTick = LK.ticks; } } game.move = handleMove; // Down: only activate boost if controller is pressed game.down = function (x, y, obj) { // Prevent controller input before game starts if (!gameStarted) return; var d = dist2(x, y, controllerCenterX, controllerCenterY); // Do not activate boost on controller press anymore if (d <= controllerRadius) { handleMove(x, y, obj); } }; // Up: stop boost and controller movement game.up = function (x, y, obj) { // Prevent controller input before game starts if (!gameStarted) return; boosting = false; player.setBoost(false); playerIsMoving = false; controllerActive = false; controllerTouchId = null; // Reset persistent controller direction lastControllerActive = false; lastControllerDirX = 0; lastControllerDirY = 0; // Reset knob to center controllerKnob.x = controllerCenterX; controllerKnob.y = controllerCenterY; }; // --- Main Game Loop --- game.update = function () { // Only run game logic if gameStarted is true if (!gameStarted) { return; } // Update player // If controller was last dragged in a direction, keep moving in that direction if (typeof lastControllerActive !== "undefined" && lastControllerActive && typeof lastControllerDirX !== "undefined" && typeof lastControllerDirY !== "undefined") { // Set direction to last drag direction player.dirX = lastControllerDirX; player.dirY = lastControllerDirY; playerIsMoving = true; } // Handle shoot speed boost timer if (player._shootBoostActive) { if (typeof player._shootBoostTicks === "undefined") player._shootBoostTicks = 0; player._shootBoostTicks--; if (player._shootBoostTicks <= 0) { player._shootBoostActive = false; } } player.update(); // If no move event occurred this frame, stop player movement if (typeof LK !== "undefined" && typeof LK.ticks !== "undefined") { if (typeof lastMoveTick === "undefined") { lastMoveTick = LK.ticks; } if (lastMoveTick !== LK.ticks) { // Only stop if controller is not active if (!lastControllerActive) { playerIsMoving = false; } } } // --- Timer and Dynamic Enemy Spawning --- gameTimerTicks++; // Update timer text (show mm:ss) var elapsedSec = Math.floor(gameTimerTicks / 60); var min = Math.floor(elapsedSec / 60); var sec = elapsedSec % 60; timerTxt.setText(min + ':' + (sec < 10 ? '0' : '') + sec); // Every second, increase spawn rate by reducing ENEMY_SPAWN_INTERVAL_START, but clamp to ENEMY_SPAWN_INTERVAL_END if (gameTimerTicks % 60 === 0) { ENEMY_SPAWN_INTERVAL_START = Math.max(ENEMY_SPAWN_INTERVAL_END, ENEMY_SPAWN_INTERVAL_START - 5); } // Calculate progression (0 to 1) var progress = Math.min(gameTimerTicks / GAME_TIMER_MAX, 1); // Linearly interpolate spawn interval from start to end ENEMY_SPAWN_INTERVAL = Math.round(ENEMY_SPAWN_INTERVAL_START + (ENEMY_SPAWN_INTERVAL_END - ENEMY_SPAWN_INTERVAL_START) * progress); enemySpawnTicks++; // Determine how many enemies to spawn this cycle (1 + extra for every 10 kills) var spawnCount = 1 + Math.floor(score / 10); // Boss spawn logic if (!bossSpawned && score >= 10) { bossSpawned = true; bossCar = new BossCar(); // Spawn boss at random edge var edge = Math.floor(Math.random() * 4); var bx, by; if (edge === 0) { bx = 200 + Math.random() * (2048 - 400); by = -300; } else if (edge === 1) { bx = 2048 + 300; by = 200 + Math.random() * (2732 - 400); } else if (edge === 2) { bx = 200 + Math.random() * (2048 - 400); by = 2732 + 300; } else { bx = -300; by = 200 + Math.random() * (2732 - 400); } bossCar.x = bx; bossCar.y = by; bossCar.setTarget(player.x, player.y); game.addChild(bossCar); } // Only spawn normal enemies if boss is not spawned if (!bossSpawned && enemySpawnTicks >= ENEMY_SPAWN_INTERVAL) { enemySpawnTicks = 0; for (var spawnIdx = 0; spawnIdx < spawnCount; spawnIdx++) { // Spawn enemy at random edge var edge = Math.floor(Math.random() * 4); // 0:top, 1:right, 2:bottom, 3:left var ex, ey; if (edge === 0) { // top ex = 200 + Math.random() * (2048 - 400); ey = -160; } else if (edge === 1) { // right ex = 2048 + 160; ey = 200 + Math.random() * (2732 - 400); } else if (edge === 2) { // bottom ex = 200 + Math.random() * (2048 - 400); ey = 2732 + 160; } else { // left ex = -160; ey = 200 + Math.random() * (2732 - 400); } var enemy = new EnemyCar(); enemy.x = ex; enemy.y = ey; enemy.setTarget(player.x, player.y); enemies.push(enemy); game.addChild(enemy); } } // --- Update Enemies --- for (var i = enemies.length - 1; i >= 0; i--) { var enemy = enemies[i]; enemy.setTarget(player.x, player.y); enemy.update(); // Check collision with player (circle collision) var dx = enemy.x - player.x; var dy = enemy.y - player.y; var dist = Math.sqrt(dx * dx + dy * dy); if (dist < 160) { // Game over LK.effects.flashScreen(0xff0000, 1000); LK.showGameOver(); return; } } // --- Update BossCar --- if (bossSpawned && bossCar) { bossCar.setTarget(player.x, player.y); bossCar.update(); // Check collision with player (circle collision, bigger radius) var bdx = bossCar.x - player.x; var bdy = bossCar.y - player.y; var bdist = Math.sqrt(bdx * bdx + bdy * bdy); if (bdist < 220) { // Game over LK.effects.flashScreen(0xff0000, 1000); LK.showGameOver(); return; } // BossCar damages enemies it collides with (just like player does) for (var i = enemies.length - 1; i >= 0; i--) { var enemy = enemies[i]; var edx = bossCar.x - enemy.x; var edy = bossCar.y - enemy.y; var edist = Math.sqrt(edx * edx + edy * edy); if (edist < 160) { // Remove enemy enemy.destroy(); enemies.splice(i, 1); // Optionally, you could increment score or add effect, but for now just remove } } // If boss defeated, show win if (bossCar.health <= 0) { // Spawn power-up box at boss position, using bossDropBox asset var powerUpBox = new PowerUpBox(true); powerUpBox.x = bossCar.x; powerUpBox.y = bossCar.y; game.addChild(powerUpBox); // Store reference for collision check game._powerUpBox = powerUpBox; bossCar.destroy(); bossCar = null; level = 2; if (typeof levelTxt !== "undefined") { levelTxt.setText("Level " + level); } LK.effects.flashScreen(0x00ff00, 1000); // Do NOT show win yet; wait for player to collect power-up // LK.showYouWin(); // return; } } // --- PowerUpBox pickup check --- if (game._powerUpBox) { var dx = player.x - game._powerUpBox.x; var dy = player.y - game._powerUpBox.y; var dist = Math.sqrt(dx * dx + dy * dy); if (dist < 120) { // Picked up! game._powerUpBox.destroy(); game._powerUpBox = null; // Apply shoot speed boost (reduce cooldown) player._shootBoostActive = true; player._shootBoostTicks = 60 * 8; // 8 seconds player.shootCooldown = 0; // allow instant shot // Visual feedback (flash) LK.effects.flashObject(player, 0x4ddcfe, 800); // Show win after pickup LK.effects.flashScreen(0x00ff00, 1000); LK.showYouWin(); return; } } // --- Auto-shoot at nearest enemy or bossCar --- // If there are enemies, shoot at nearest enemy. If not, and bossCar is present, shoot at bossCar. if (player.shootCooldown === 0) { var target = null; if (enemies.length > 0) { // Find nearest enemy var minDist = 999999; for (var i = 0; i < enemies.length; i++) { var dx = enemies[i].x - player.x; var dy = enemies[i].y - player.y; var d = dx * dx + dy * dy; if (d < minDist) { minDist = d; target = enemies[i]; } } } else if (bossSpawned && bossCar) { // Only target bossCar if within enemy range (same as enemy targeting) var dx = bossCar.x - player.x; var dy = bossCar.y - player.y; var dist = Math.sqrt(dx * dx + dy * dy); if (dist < 900) { // 900 is 30*30, but enemy targeting uses squared distance, so use same target = bossCar; } } if (target) { // Shoot bullet toward target from top of car var bullet = new Bullet(); // Place bullet at top of car (offset in direction of car) var carDir = Math.atan2(player.dirY, player.dirX); var offsetX = Math.cos(carDir) * 180; var offsetY = Math.sin(carDir) * 180; bullet.x = player.x + offsetX; bullet.y = player.y + offsetY; // Direction: from bullet to target var bdx = target.x - bullet.x; var bdy = target.y - bullet.y; bullet.setDirection(bdx, bdy); bullets.push(bullet); game.addChild(bullet); player.shootCooldown = player._shootBoostActive ? 12 : 30; // Faster fire if boost active } } // --- Update Bullets --- for (var i = bullets.length - 1; i >= 0; i--) { var bullet = bullets[i]; bullet.update(); // Remove if out of bounds if (bullet.x < -100 || bullet.x > 2048 + 100 || bullet.y < -100 || bullet.y > 2732 + 100) { bullet.destroy(); bullets.splice(i, 1); continue; } // Check collision with enemies var hit = false; for (var j = enemies.length - 1; j >= 0; j--) { var enemy = enemies[j]; var dx = bullet.x - enemy.x; var dy = bullet.y - enemy.y; var dist = Math.sqrt(dx * dx + dy * dy); if (dist < 100) { // Hit! hit = true; // Remove enemy enemy.destroy(); enemies.splice(j, 1); // Remove bullet bullet.destroy(); bullets.splice(i, 1); // Score score++; scoreTxt.setText('Score: ' + score); break; } } // Check collision with bossCar if spawned, but only if in range (same as enemy range) if (!hit && bossSpawned && bossCar && function () { var dx = bullet.x - bossCar.x; var dy = bullet.y - bossCar.y; var dist = Math.sqrt(dx * dx + dy * dy); return dist < 100; // Use same range as enemy hit }()) { // Hit boss! hit = true; bossCar.takeDamage(1); bullet.destroy(); bullets.splice(i, 1); // Optionally, flash boss or show health bar (not required for MVP) } if (hit) continue; } // --- Camera: keep player centered --- // (In LK, the game area is fixed, so we simulate by keeping player in center and moving everything else if needed) // For MVP, player always stays in center, so no need to move camera. }; // --- Initial pointer direction --- // No initial movement; player will move when controller is used player.setDirection(player.x, player.y - 1);
===================================================================
--- original.js
+++ change.js
@@ -5,8 +5,63 @@
/****
* Classes
****/
+// PlayerCar class for the player-controlled car
+var PlayerCar = Container.expand(function () {
+ var self = Container.call(this);
+ // Attach player car asset, centered
+ var car = self.attachAsset('playerCar', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ // Direction vector (normalized)
+ self.dirX = 0;
+ self.dirY = -1;
+ // Movement speed
+ self.speed = 18;
+ // Shooting cooldown (frames)
+ self.shootCooldown = 0;
+ // For shoot boost
+ self._shootBoostActive = false;
+ self._shootBoostTicks = 0;
+ // Set direction to move toward (targetX, targetY)
+ self.setDirection = function (targetX, targetY) {
+ var dx = targetX - self.x;
+ var dy = targetY - self.y;
+ var len = Math.sqrt(dx * dx + dy * dy);
+ if (len > 0.01) {
+ self.dirX = dx / len;
+ self.dirY = dy / len;
+ }
+ };
+ // Set boost (not used in MVP, but placeholder)
+ self.setBoost = function (active) {
+ // No-op for now
+ };
+ // Update method called every frame
+ self.update = function () {
+ // Move if playerIsMoving is true (global)
+ if (typeof playerIsMoving !== "undefined" && playerIsMoving) {
+ var moveSpeed = self.speed;
+ self.x += self.dirX * moveSpeed;
+ self.y += self.dirY * moveSpeed;
+ // Clamp to game area
+ if (self.x < 100) self.x = 100;
+ if (self.x > 2048 - 100) self.x = 2048 - 100;
+ if (self.y < 100) self.y = 100;
+ if (self.y > 2732 - 100) self.y = 2732 - 100;
+ }
+ // Handle shoot cooldown
+ if (self.shootCooldown > 0) {
+ self.shootCooldown--;
+ }
+ };
+ // Initial position (centered)
+ self.x = 2048 / 2;
+ self.y = 2732 - 400;
+ return self;
+});
// StartButton class for customizable start game button
var StartButton = Container.expand(function (opts) {
var self = Container.call(this);
// Default options
Kalitesini arttır
kalitesini arttır
kalitesini arttır yuvarlak olsun
remove the holes and get a flat land
mavi ve kırmızı renklerinde siyah çizgileri olan bir airdrop kutusu yap, kuş bakışı olsun üstten gözüksün. In-Game asset. 2d. High contrast. No shadows. bird eye
Bir tank savaşı temalı arkaplan görseli hazırla görselde 2 tank olsun ve bu 2 tankın önündeki 1 tankı yakalamaya çalışsın.. In-Game asset. 2d. High contrast. No shadows
daha kaliteli yap
War dropbox a bird view blue and red. In-Game asset. 2d. High contrast. No shadows. In-Game asset. 2d. High contrast. No shadows
real explosion. In-Game asset. 2d. High contrast. No shadows
Arka Planını temizle
clear background
Erase background