User prompt
пересечение пули и игрока засчитывается если радиус пули 10 пересек квадрат 100 на 100 игрока
User prompt
пересечение объектов самолета игрока и bullet в радиусе изображениям, а не объекта
Code edit (1 edits merged)
Please save this source code
User prompt
сделать проверку на пересечения пули радиусом 10 и самолета радиусом 45
User prompt
скорость пули 3
User prompt
сделать проверку на пересечения пули радиусом 10 и самолета радиусом 50
User prompt
сделать проверку пересечения изображения пули радиусом 10 и изображением игрока радиусом х =80 y = 30
User prompt
определить пересечение пули с игроком по маске игрока
Code edit (1 edits merged)
Please save this source code
User prompt
создать маску столкновения для самолета игрока
User prompt
пуля пересекает игрока не в размерах самолета, а в отображении картинки самолета
User prompt
настроить проверку пересечения пули и игрока: пересечение пули радиус = 10 и игрока радиус 100
User prompt
пересечение пули с игроком проверяется по радиусу x=150 y = 80
User prompt
пересечение пули и игрока проверяется пересечением изображения пули к игроку
User prompt
пересечение пули и игрока в в размере изображения, а не объекта
User prompt
если пуля касается игрока, то смерть
User prompt
пуля вылетает в случайном направлении и летит по прямой
Code edit (3 edits merged)
Please save this source code
User prompt
пуля вылетает в рандомном направлении от 0 до 90 градусов и летит ровно
User prompt
пуля летит рандомно от 0 до 90 градусов
User prompt
пуля не преследует игрока, а летит в по направлению своего движения
User prompt
пуля летит в направлении, где в данный момент находится игрок
User prompt
пуля летит в направление движения игрока
User prompt
пуля летит в игрока
User prompt
пуля появляется через 3 секунды, до этого момента она не отображается
/**** * Classes ****/ var Bullet = Container.expand(function () { var self = Container.call(this); var bulletGraphics = self.attachAsset('bullet', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 8; self.visible = false; self.angle = Math.random() * Math.PI / 2; // Random angle between 0 and 90 degrees self.update = function () { if (LK.ticks > 180) { self.visible = true; self.x += self.speed * Math.cos(self.angle); self.y -= self.speed * Math.sin(self.angle); } }; }); var Cannon = Container.expand(function () { var self = Container.call(this); var cannonGraphics = self.attachAsset('Cannon', { anchorX: 0.5, anchorY: 0.5 }); }); // Cannon2 class var Cannon2 = Container.expand(function () { var self = Container.call(this); var cannon2Graphics = self.attachAsset('Cannon2', { anchorX: 0.5, anchorY: 0.5 }); }); // EnemyPlane class var EnemyPlane = Container.expand(function () { var self = Container.call(this); var enemyPlaneGraphics = self.attachAsset('enemy', { anchorX: 0.5, anchorY: 0.5 }); self.speedX = -6; self.speedY = 0; // Update enemy plane position self.update = function () { self.x += self.speedX; self.y -= self.speed; }; }); // EnemyPlaneLeft class var EnemyPlaneLeft = Container.expand(function () { var self = Container.call(this); var enemyPlaneGraphics = self.attachAsset('Enemyleft', { anchorX: 0.5, anchorY: 0.5 }); self.speedX = 6; self.speedY = 0; // Update enemy plane position self.update = function () { self.x += self.speedX; self.y += self.speedY; }; }); // Plane1 class var Plane1 = Container.expand(function () { var self = Container.call(this); var planeGraphics = self.attachAsset('plane', { anchorX: 0.5, anchorY: 0.5 }); // Define a collision mask for the plane based on its image shape self.collisionMask = { type: 'polygon', points: [{ x: -80, y: -50 }, // Top left { x: 80, y: -50 }, // Top right { x: 90, y: 50 }, // Bottom right { x: -90, y: 20 } // Bottom left ] }; self.speedX = 7; self.speedY = 0; // Update plane position self.update = function () { self.x += self.speedX; self.y += self.speedY; // Check if the plane has crossed the screen boundary if (self.x < 0) { self.x = 2048; } else if (self.x > 2048) { self.x = 0; } // Prevent the plane from crossing the floor and ceiling if (self.y < 0) { self.y = 0; self.speedY = 0; } else if (self.y > 2752 - self.height) { self.y = 2752 - self.height; self.speedY = 0; } }; }); /**** * Initialize Game ****/ // Assets are automatically created based on usage in the code. var game = new LK.Game({ backgroundColor: 0xffffff // Init game with white background }); /**** * Game Code ****/ var background2 = game.attachAsset('background2', { anchorX: 0.5, anchorY: 0.5, scaleX: 1, scaleY: 1 }); background2.x = 2175 / 2; background2.y = 2620 / 2; // Add background to the bottom of the game var background = game.attachAsset('background', { anchorX: 0, anchorY: 1, scaleX: 1, scaleY: 1 }); background.y = 2732; var enemyPlanes = []; // Global array to keep track of enemy planes var enemyPlane; // Global variable to keep track of the enemy plane // Create a player plane var plane1 = new Plane1(); plane1.x = 150; // Moved 50 units to the right plane1.y = 2750 - plane1.height; // Bottom of the screen game.addChild(plane1); // Create a cannon var cannon = new Cannon(); cannon.x = -100; // Position at the bottom left of the screen cannon.y = 2660; game.addChild(cannon); // Create a cannon2 var cannon2 = new Cannon2(); cannon2.x = 2150; // Position at the bottom left of the screen cannon2.y = 2660; game.addChild(cannon2); var bullet = new Bullet(); bullet.x = 175; bullet.y = 2590; game.addChild(bullet); // Create the rest of the enemy planes every 2 seconds for the first 7 seconds var enemySpawnTimer = LK.setInterval(function () { enemyPlane = new EnemyPlane(); enemyPlane.x = 2150; enemyPlane.y = 100 + Math.random() * (2732 - enemyPlane.height - 100); // Random y-coordinate between 100 and 2732 minus the height of the enemy plane game.addChild(enemyPlane); enemyPlanes.push(enemyPlane); var enemyPlaneLeft = new EnemyPlaneLeft(); enemyPlaneLeft.x = -100; enemyPlaneLeft.y = 100 + Math.random() * (2732 - enemyPlaneLeft.height - 100); // Random y-coordinate between 100 and 2732 minus the height of the enemy plane game.addChild(enemyPlaneLeft); enemyPlanes.push(enemyPlaneLeft); }, 1500); // After 7 seconds, change the enemy spawn interval to 1 every 1.3 seconds LK.setTimeout(function () { LK.clearInterval(enemySpawnTimer); enemySpawnTimer = LK.setInterval(function () { enemyPlane = new EnemyPlane(); enemyPlane.x = 2150; enemyPlane.y = 100 + Math.random() * (2732 - enemyPlane.height - 100); // Random y-coordinate between 100 and 2732 minus the height of the enemy plane game.addChild(enemyPlane); enemyPlanes.push(enemyPlane); var enemyPlaneLeft = new EnemyPlaneLeft(); enemyPlaneLeft.x = -100; enemyPlaneLeft.y = 100 + Math.random() * (2732 - enemyPlaneLeft.height - 100); // Random y-coordinate between 100 and 2732 minus the height of the enemy plane game.addChild(enemyPlaneLeft); enemyPlanes.push(enemyPlaneLeft); }, 1300); }, 5000); // After 14 seconds, change the enemy spawn interval to 1 every second LK.setTimeout(function () { LK.clearInterval(enemySpawnTimer); enemySpawnTimer = LK.setInterval(function () { enemyPlane = new EnemyPlane(); enemyPlane.x = 2150; enemyPlane.y = 100 + Math.random() * (2732 - enemyPlane.height - 100); // Random y-coordinate between 100 and 2732 minus the height of the enemy plane game.addChild(enemyPlane); enemyPlanes.push(enemyPlane); var enemyPlaneLeft = new EnemyPlaneLeft(); enemyPlaneLeft.x = -100; enemyPlaneLeft.y = 100 + Math.random() * (2732 - enemyPlaneLeft.height - 100); // Random y-coordinate between 100 and 2732 minus the height of the enemy plane game.addChild(enemyPlaneLeft); enemyPlanes.push(enemyPlaneLeft); }, 1000); }, 11000); // Set up game tick LK.on('tick', function () { plane1.update(); bullet.update(); for (var i = 0; i < enemyPlanes.length; i++) { enemyPlanes[i].update(); } }); // Flags to track if the screen is being touched var isTouchingLeft = false; var isTouchingRight = false; // Change enemy direction when the screen is touched var initialTouchPosition = null; game.on('down', function (obj) { initialTouchPosition = obj.event.getLocalPosition(game); }); game.on('move', function (obj) { if (initialTouchPosition) { var currentTouchPosition = obj.event.getLocalPosition(game); var swipeDirection = currentTouchPosition.x - initialTouchPosition.x; if (swipeDirection < 0) { isTouchingLeft = true; isTouchingRight = false; } else if (swipeDirection > 0) { isTouchingRight = true; isTouchingLeft = false; } } }); // Stop changing enemy direction when the screen is no longer being touched game.on('up', function (obj) { isTouchingLeft = false; isTouchingRight = false; initialTouchPosition = null; }); // In the game tick, change plane direction while the screen is being touched LK.on('tick', function () { if (isTouchingLeft) { var angle = Math.atan2(plane1.speedY, plane1.speedX); angle -= Math.PI / 60; // Subtract 1.5 degrees (in radians) for counter-clockwise rotation plane1.speedX = Math.cos(angle) * 7; plane1.speedY = Math.sin(angle) * 7; plane1.rotation -= Math.PI / 60; // Rotate the plane counter-clockwise } if (isTouchingRight && LK.ticks > 78) { var angle = Math.atan2(plane1.speedY, plane1.speedX); angle += Math.PI / 60; // Add 1.5 degrees (in radians) for clockwise rotation plane1.speedX = Math.cos(angle) * 7; plane1.speedY = Math.sin(angle) * 7; plane1.rotation += Math.PI / 60; // Rotate the plane clockwise } // Check if the plane crosses the side boundaries of the screen, touches the top or bottom of the screen, or collides with the health_bar if (plane1.x <= 70 || plane1.x >= 2170 - plane1.width || plane1.y <= 70 || plane1.y >= 2752 - plane1.height) { // Trigger game over LK.effects.flashScreen(0xff0000, 1000); LK.showGameOver(); } // Check if the bullet touches the player using the collision mask if (bullet.visible && checkCollisionMask(bullet, plane1)) { // Trigger game over LK.effects.flashScreen(0xff0000, 1000); LK.showGameOver(); } // Function to check collision using masks function checkCollisionMask(bullet, plane) { // Assuming bullet is a circle for simplicity, and plane uses a polygon mask var bulletCenter = { x: bullet.x, y: bullet.y }; var bulletRadius = bullet.width / 2; // Assuming width and height are equal for the bullet var vertices = plane.collisionMask.points.map(function (p) { return { x: plane.x + p.x, y: plane.y + p.y }; }); // Check if bullet's center is inside the polygon (plane's collision mask) if (isPointInPolygon(bulletCenter, vertices)) { return true; } // Check each edge of the polygon to see if it intersects with the bullet's circle for (var i = 0; i < vertices.length; i++) { var start = vertices[i]; var end = vertices[(i + 1) % vertices.length]; if (lineCircleIntersection(start, end, bulletCenter, bulletRadius)) { return true; } } return false; } // Function to check if a point is inside a polygon function isPointInPolygon(point, vertices) { var intersectCount = 0; for (var i = 0; i < vertices.length; i++) { var j = (i + 1) % vertices.length; if (vertices[i].y > point.y != vertices[j].y > point.y && point.x < (vertices[j].x - vertices[i].x) * (point.y - vertices[i].y) / (vertices[j].y - vertices[i].y) + vertices[i].x) { intersectCount++; } } return intersectCount % 2 == 1; } // Function to check if a line segment intersects a circle function lineCircleIntersection(start, end, center, radius) { var d = { x: end.x - start.x, y: end.y - start.y }; var f = { x: start.x - center.x, y: start.y - center.y }; var a = d.x * d.x + d.y * d.y; var b = 2 * (f.x * d.x + f.y * d.y); var c = f.x * f.x + f.y * f.y - radius * radius; var discriminant = b * b - 4 * a * c; if (discriminant < 0) { // No intersection return false; } else { // It's a line intersection check, not a segment check, but it's enough for demonstration return true; } } // Check for collision between player and enemy planes for (var i = 0; i < enemyPlanes.length; i++) { if (plane1.x < enemyPlanes[i].x + 100 && plane1.x + 100 > enemyPlanes[i].x && plane1.y < enemyPlanes[i].y + 100 && plane1.y + 100 > enemyPlanes[i].y) { // Add a red flash screen effect LK.effects.flashScreen(0xff0000, 1000); // Trigger game over LK.showGameOver(); } } // Delay the movement of the cannons by 4 seconds after the game starts LK.setTimeout(function () { if (cannon.x < 100) { cannon.x += 2; } if (cannon2.x > 1950) { cannon2.x -= 2; } }, 1000); });
===================================================================
--- original.js
+++ change.js
@@ -266,14 +266,75 @@
// Trigger game over
LK.effects.flashScreen(0xff0000, 1000);
LK.showGameOver();
}
- // Check if the bullet touches the player
- if (bullet.visible && bullet.intersects(plane1)) {
+ // Check if the bullet touches the player using the collision mask
+ if (bullet.visible && checkCollisionMask(bullet, plane1)) {
// Trigger game over
LK.effects.flashScreen(0xff0000, 1000);
LK.showGameOver();
}
+ // Function to check collision using masks
+ function checkCollisionMask(bullet, plane) {
+ // Assuming bullet is a circle for simplicity, and plane uses a polygon mask
+ var bulletCenter = {
+ x: bullet.x,
+ y: bullet.y
+ };
+ var bulletRadius = bullet.width / 2; // Assuming width and height are equal for the bullet
+ var vertices = plane.collisionMask.points.map(function (p) {
+ return {
+ x: plane.x + p.x,
+ y: plane.y + p.y
+ };
+ });
+ // Check if bullet's center is inside the polygon (plane's collision mask)
+ if (isPointInPolygon(bulletCenter, vertices)) {
+ return true;
+ }
+ // Check each edge of the polygon to see if it intersects with the bullet's circle
+ for (var i = 0; i < vertices.length; i++) {
+ var start = vertices[i];
+ var end = vertices[(i + 1) % vertices.length];
+ if (lineCircleIntersection(start, end, bulletCenter, bulletRadius)) {
+ return true;
+ }
+ }
+ return false;
+ }
+ // Function to check if a point is inside a polygon
+ function isPointInPolygon(point, vertices) {
+ var intersectCount = 0;
+ for (var i = 0; i < vertices.length; i++) {
+ var j = (i + 1) % vertices.length;
+ if (vertices[i].y > point.y != vertices[j].y > point.y && point.x < (vertices[j].x - vertices[i].x) * (point.y - vertices[i].y) / (vertices[j].y - vertices[i].y) + vertices[i].x) {
+ intersectCount++;
+ }
+ }
+ return intersectCount % 2 == 1;
+ }
+ // Function to check if a line segment intersects a circle
+ function lineCircleIntersection(start, end, center, radius) {
+ var d = {
+ x: end.x - start.x,
+ y: end.y - start.y
+ };
+ var f = {
+ x: start.x - center.x,
+ y: start.y - center.y
+ };
+ var a = d.x * d.x + d.y * d.y;
+ var b = 2 * (f.x * d.x + f.y * d.y);
+ var c = f.x * f.x + f.y * f.y - radius * radius;
+ var discriminant = b * b - 4 * a * c;
+ if (discriminant < 0) {
+ // No intersection
+ return false;
+ } else {
+ // It's a line intersection check, not a segment check, but it's enough for demonstration
+ return true;
+ }
+ }
// Check for collision between player and enemy planes
for (var i = 0; i < enemyPlanes.length; i++) {
if (plane1.x < enemyPlanes[i].x + 100 && plane1.x + 100 > enemyPlanes[i].x && plane1.y < enemyPlanes[i].y + 100 && plane1.y + 100 > enemyPlanes[i].y) {
// Add a red flash screen effect
снаряд от пушки. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
чистое голубое небо. задний фон. мультяшный. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
Артиллерийское оружие, смотрит вверх. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
Нажатие по экрану. Палец. Мультяшный. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.