User prompt
tutunma işlemi her zaman soldan oluyor ve soldan sağa doğru dönüş oluyor bu tam tersine de olabilsin ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
bu tutulan şeylerin içinden geçilmesin bunlara çarpılabilsin tıpkı engellere çarpılır gibi
User prompt
tutma işlemi sadece soldan olmasın sağdan da olsun
User prompt
bu radius alanları boyuta orantılı olsun
User prompt
bazen dümdüz önüme hiçbir tutunma alanı gelmeden uçuyorum baya bir gidiyorum tutuncak bişey önüme gelmediği için ölüyorum bunu biraz çözebilir misin
User prompt
şöyle yapalım mouse basılı tuttuğumuzda tutunma olsun el çekildiğinde tutunma bitsin
User prompt
tutmalar akıcı olsun tutma menzili biraz daha uzun olsun hatta radius alanı olarak görünsün tutma alanı oynayan kişi bilsin tutma menzilini
User prompt
top biraz daha hızlansın bazı yerlerde az miktarlarda zorluk olması açısından mantıklı yerlerde engeller olsun
User prompt
tutulacak toplar bukadar sık olmasın az az olsun oyunun zoeluğu artsın biraz
User prompt
çarpılacak engeller olmasın tutma mekaniği tam doğru çalışmıyor bazen tutamıyorum
User prompt
daha oynanabilir olsun aradaki zincir görünsün şu tutulan toplar boy boy olsun hepsi aynı boyda olmasın
Code edit (1 edits merged)
Please save this source code
User prompt
One More Line
Initial prompt
one more line diye bir oyun vardı mobilde aynısını yapabilir misin
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
/****
* Classes
****/
var Anchor = Container.expand(function () {
var self = Container.call(this);
var anchorGraphics = self.attachAsset('anchor', {
anchorX: 0.5,
anchorY: 0.5
});
self.range = 150;
self.used = false;
self.update = function () {
// Pulse animation
var scale = 1 + Math.sin(LK.ticks * 0.1) * 0.1;
anchorGraphics.scaleX = scale;
anchorGraphics.scaleY = scale;
};
self.isInRange = function (playerX, playerY) {
var distance = Math.sqrt(Math.pow(self.x - playerX, 2) + Math.pow(self.y - playerY, 2));
return distance <= self.range;
};
return self;
});
var Player = Container.expand(function () {
var self = Container.call(this);
var playerGraphics = self.attachAsset('player', {
anchorX: 0.5,
anchorY: 0.5
});
self.velocityX = 0;
self.velocityY = 0;
self.speed = 8;
self.isGrappling = false;
self.grappleAnchor = null;
self.grappleDistance = 0;
self.grappleAngle = 0;
self.trail = [];
self.update = function () {
if (self.isGrappling && self.grappleAnchor) {
// Swing around anchor point
self.grappleAngle += 0.08;
self.x = self.grappleAnchor.x + Math.cos(self.grappleAngle) * self.grappleDistance;
self.y = self.grappleAnchor.y + Math.sin(self.grappleAngle) * self.grappleDistance;
// Update velocity based on swing direction
var nextX = self.grappleAnchor.x + Math.cos(self.grappleAngle + 0.08) * self.grappleDistance;
var nextY = self.grappleAnchor.y + Math.sin(self.grappleAngle + 0.08) * self.grappleDistance;
self.velocityX = (nextX - self.x) * 1.5;
self.velocityY = (nextY - self.y) * 1.5;
} else {
// Move in straight line
self.x += self.velocityX;
self.y += self.velocityY;
}
// Add trail effect
self.trail.push({
x: self.x,
y: self.y
});
if (self.trail.length > 10) {
self.trail.shift();
}
};
self.startGrapple = function (anchor) {
if (!self.isGrappling) {
self.isGrappling = true;
self.grappleAnchor = anchor;
self.grappleDistance = Math.sqrt(Math.pow(self.x - anchor.x, 2) + Math.pow(self.y - anchor.y, 2));
self.grappleAngle = Math.atan2(self.y - anchor.y, self.x - anchor.x);
LK.getSound('grapple').play();
// Visual feedback
tween(anchor, {
scaleX: 1.3,
scaleY: 1.3
}, {
duration: 200,
easing: tween.easeOut
});
tween(anchor, {
scaleX: 1,
scaleY: 1
}, {
duration: 300,
easing: tween.easeIn
});
}
};
self.releaseGrapple = function () {
if (self.isGrappling) {
self.isGrappling = false;
self.grappleAnchor = null;
LK.getSound('release').play();
// Normalize velocity
var speed = Math.sqrt(self.velocityX * self.velocityX + self.velocityY * self.velocityY);
if (speed > 0) {
self.velocityX = self.velocityX / speed * self.speed;
self.velocityY = self.velocityY / speed * self.speed;
}
}
};
return self;
});
var Wall = Container.expand(function () {
var self = Container.call(this);
var wallGraphics = self.attachAsset('wall', {
anchorX: 0.5,
anchorY: 0.5
});
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x1a1a1a
});
/****
* Game Code
****/
// Game variables
var player;
var anchors = [];
var walls = [];
var gameSpeed = 1;
var distanceTraveled = 0;
var lastAnchorY = 0;
var lastWallY = 0;
// UI elements
var scoreTxt = new Text2('0', {
size: 80,
fill: 0xFFFFFF
});
scoreTxt.anchor.set(0.5, 0);
LK.gui.top.addChild(scoreTxt);
var distanceTxt = new Text2('0m', {
size: 60,
fill: 0x888888
});
distanceTxt.anchor.set(0.5, 0);
distanceTxt.y = 100;
LK.gui.top.addChild(distanceTxt);
// Initialize player
player = game.addChild(new Player());
player.x = 1024;
player.y = 2200;
player.velocityX = 0;
player.velocityY = -player.speed;
// Generate initial anchors
function generateAnchor(x, y) {
var anchor = new Anchor();
anchor.x = x;
anchor.y = y;
anchors.push(anchor);
game.addChild(anchor);
return anchor;
}
function generateWall(x, y, width, height) {
var wall = new Wall();
wall.x = x;
wall.y = y;
if (width) wall.width = width;
if (height) wall.height = height;
walls.push(wall);
game.addChild(wall);
return wall;
}
// Generate initial level
for (var i = 0; i < 10; i++) {
var anchorX = 400 + Math.random() * 1248;
var anchorY = 2000 - i * 300;
generateAnchor(anchorX, anchorY);
lastAnchorY = anchorY;
}
// Generate initial walls
for (var i = 0; i < 5; i++) {
var wallX = Math.random() * 1848 + 100;
var wallY = 1800 - i * 400;
generateWall(wallX, wallY, 200 + Math.random() * 300, 40);
lastWallY = wallY;
}
// Touch input
game.down = function (x, y, obj) {
if (!player.isGrappling) {
// Find nearest anchor in range
var nearestAnchor = null;
var nearestDistance = Infinity;
for (var i = 0; i < anchors.length; i++) {
var anchor = anchors[i];
if (anchor.isInRange(player.x, player.y)) {
var distance = Math.sqrt(Math.pow(player.x - anchor.x, 2) + Math.pow(player.y - anchor.y, 2));
if (distance < nearestDistance) {
nearestDistance = distance;
nearestAnchor = anchor;
}
}
}
if (nearestAnchor) {
player.startGrapple(nearestAnchor);
if (!nearestAnchor.used) {
nearestAnchor.used = true;
LK.setScore(LK.getScore() + 10);
scoreTxt.setText(LK.getScore());
}
}
} else {
player.releaseGrapple();
}
};
// Game update loop
game.update = function () {
// Update distance
distanceTraveled += Math.abs(player.velocityY) * 0.1;
distanceTxt.setText(Math.floor(distanceTraveled) + 'm');
// Increase game speed gradually
gameSpeed = 1 + distanceTraveled * 0.001;
// Generate new anchors as player moves up
if (player.y < lastAnchorY + 500) {
for (var i = 0; i < 3; i++) {
var anchorX = 200 + Math.random() * 1648;
var anchorY = lastAnchorY - 250 - Math.random() * 200;
generateAnchor(anchorX, anchorY);
}
lastAnchorY -= 300;
}
// Generate new walls
if (player.y < lastWallY + 600) {
var wallCount = 1 + Math.floor(Math.random() * 3);
for (var i = 0; i < wallCount; i++) {
var wallX = Math.random() * 1648 + 200;
var wallY = lastWallY - 400 - Math.random() * 200;
var wallWidth = 150 + Math.random() * 400;
generateWall(wallX, wallY, wallWidth, 40);
}
lastWallY -= 400;
}
// Clean up old anchors
for (var i = anchors.length - 1; i >= 0; i--) {
var anchor = anchors[i];
if (anchor.y > player.y + 1000) {
anchor.destroy();
anchors.splice(i, 1);
}
}
// Clean up old walls
for (var i = walls.length - 1; i >= 0; i--) {
var wall = walls[i];
if (wall.y > player.y + 1000) {
wall.destroy();
walls.splice(i, 1);
}
}
// Check wall collisions
for (var i = 0; i < walls.length; i++) {
var wall = walls[i];
if (player.intersects(wall)) {
LK.effects.flashScreen(0xff0000, 1000);
LK.showGameOver();
return;
}
}
// Check boundaries
if (player.x < 0 || player.x > 2048 || player.y > 2732 + 200) {
LK.effects.flashScreen(0xff0000, 1000);
LK.showGameOver();
return;
}
// Camera follow (move everything down as player moves up)
if (player.y < 1366) {
var offset = 1366 - player.y;
player.y = 1366;
// Move all anchors down
for (var i = 0; i < anchors.length; i++) {
anchors[i].y += offset;
}
// Move all walls down
for (var i = 0; i < walls.length; i++) {
walls[i].y += offset;
}
lastAnchorY += offset;
lastWallY += offset;
}
}; ===================================================================
--- original.js
+++ change.js
@@ -1,6 +1,288 @@
-/****
+/****
+* Plugins
+****/
+var tween = LK.import("@upit/tween.v1");
+
+/****
+* Classes
+****/
+var Anchor = Container.expand(function () {
+ var self = Container.call(this);
+ var anchorGraphics = self.attachAsset('anchor', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.range = 150;
+ self.used = false;
+ self.update = function () {
+ // Pulse animation
+ var scale = 1 + Math.sin(LK.ticks * 0.1) * 0.1;
+ anchorGraphics.scaleX = scale;
+ anchorGraphics.scaleY = scale;
+ };
+ self.isInRange = function (playerX, playerY) {
+ var distance = Math.sqrt(Math.pow(self.x - playerX, 2) + Math.pow(self.y - playerY, 2));
+ return distance <= self.range;
+ };
+ return self;
+});
+var Player = Container.expand(function () {
+ var self = Container.call(this);
+ var playerGraphics = self.attachAsset('player', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.velocityX = 0;
+ self.velocityY = 0;
+ self.speed = 8;
+ self.isGrappling = false;
+ self.grappleAnchor = null;
+ self.grappleDistance = 0;
+ self.grappleAngle = 0;
+ self.trail = [];
+ self.update = function () {
+ if (self.isGrappling && self.grappleAnchor) {
+ // Swing around anchor point
+ self.grappleAngle += 0.08;
+ self.x = self.grappleAnchor.x + Math.cos(self.grappleAngle) * self.grappleDistance;
+ self.y = self.grappleAnchor.y + Math.sin(self.grappleAngle) * self.grappleDistance;
+ // Update velocity based on swing direction
+ var nextX = self.grappleAnchor.x + Math.cos(self.grappleAngle + 0.08) * self.grappleDistance;
+ var nextY = self.grappleAnchor.y + Math.sin(self.grappleAngle + 0.08) * self.grappleDistance;
+ self.velocityX = (nextX - self.x) * 1.5;
+ self.velocityY = (nextY - self.y) * 1.5;
+ } else {
+ // Move in straight line
+ self.x += self.velocityX;
+ self.y += self.velocityY;
+ }
+ // Add trail effect
+ self.trail.push({
+ x: self.x,
+ y: self.y
+ });
+ if (self.trail.length > 10) {
+ self.trail.shift();
+ }
+ };
+ self.startGrapple = function (anchor) {
+ if (!self.isGrappling) {
+ self.isGrappling = true;
+ self.grappleAnchor = anchor;
+ self.grappleDistance = Math.sqrt(Math.pow(self.x - anchor.x, 2) + Math.pow(self.y - anchor.y, 2));
+ self.grappleAngle = Math.atan2(self.y - anchor.y, self.x - anchor.x);
+ LK.getSound('grapple').play();
+ // Visual feedback
+ tween(anchor, {
+ scaleX: 1.3,
+ scaleY: 1.3
+ }, {
+ duration: 200,
+ easing: tween.easeOut
+ });
+ tween(anchor, {
+ scaleX: 1,
+ scaleY: 1
+ }, {
+ duration: 300,
+ easing: tween.easeIn
+ });
+ }
+ };
+ self.releaseGrapple = function () {
+ if (self.isGrappling) {
+ self.isGrappling = false;
+ self.grappleAnchor = null;
+ LK.getSound('release').play();
+ // Normalize velocity
+ var speed = Math.sqrt(self.velocityX * self.velocityX + self.velocityY * self.velocityY);
+ if (speed > 0) {
+ self.velocityX = self.velocityX / speed * self.speed;
+ self.velocityY = self.velocityY / speed * self.speed;
+ }
+ }
+ };
+ return self;
+});
+var Wall = Container.expand(function () {
+ var self = Container.call(this);
+ var wallGraphics = self.attachAsset('wall', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ return self;
+});
+
+/****
* Initialize Game
-****/
+****/
var game = new LK.Game({
- backgroundColor: 0x000000
-});
\ No newline at end of file
+ backgroundColor: 0x1a1a1a
+});
+
+/****
+* Game Code
+****/
+// Game variables
+var player;
+var anchors = [];
+var walls = [];
+var gameSpeed = 1;
+var distanceTraveled = 0;
+var lastAnchorY = 0;
+var lastWallY = 0;
+// UI elements
+var scoreTxt = new Text2('0', {
+ size: 80,
+ fill: 0xFFFFFF
+});
+scoreTxt.anchor.set(0.5, 0);
+LK.gui.top.addChild(scoreTxt);
+var distanceTxt = new Text2('0m', {
+ size: 60,
+ fill: 0x888888
+});
+distanceTxt.anchor.set(0.5, 0);
+distanceTxt.y = 100;
+LK.gui.top.addChild(distanceTxt);
+// Initialize player
+player = game.addChild(new Player());
+player.x = 1024;
+player.y = 2200;
+player.velocityX = 0;
+player.velocityY = -player.speed;
+// Generate initial anchors
+function generateAnchor(x, y) {
+ var anchor = new Anchor();
+ anchor.x = x;
+ anchor.y = y;
+ anchors.push(anchor);
+ game.addChild(anchor);
+ return anchor;
+}
+function generateWall(x, y, width, height) {
+ var wall = new Wall();
+ wall.x = x;
+ wall.y = y;
+ if (width) wall.width = width;
+ if (height) wall.height = height;
+ walls.push(wall);
+ game.addChild(wall);
+ return wall;
+}
+// Generate initial level
+for (var i = 0; i < 10; i++) {
+ var anchorX = 400 + Math.random() * 1248;
+ var anchorY = 2000 - i * 300;
+ generateAnchor(anchorX, anchorY);
+ lastAnchorY = anchorY;
+}
+// Generate initial walls
+for (var i = 0; i < 5; i++) {
+ var wallX = Math.random() * 1848 + 100;
+ var wallY = 1800 - i * 400;
+ generateWall(wallX, wallY, 200 + Math.random() * 300, 40);
+ lastWallY = wallY;
+}
+// Touch input
+game.down = function (x, y, obj) {
+ if (!player.isGrappling) {
+ // Find nearest anchor in range
+ var nearestAnchor = null;
+ var nearestDistance = Infinity;
+ for (var i = 0; i < anchors.length; i++) {
+ var anchor = anchors[i];
+ if (anchor.isInRange(player.x, player.y)) {
+ var distance = Math.sqrt(Math.pow(player.x - anchor.x, 2) + Math.pow(player.y - anchor.y, 2));
+ if (distance < nearestDistance) {
+ nearestDistance = distance;
+ nearestAnchor = anchor;
+ }
+ }
+ }
+ if (nearestAnchor) {
+ player.startGrapple(nearestAnchor);
+ if (!nearestAnchor.used) {
+ nearestAnchor.used = true;
+ LK.setScore(LK.getScore() + 10);
+ scoreTxt.setText(LK.getScore());
+ }
+ }
+ } else {
+ player.releaseGrapple();
+ }
+};
+// Game update loop
+game.update = function () {
+ // Update distance
+ distanceTraveled += Math.abs(player.velocityY) * 0.1;
+ distanceTxt.setText(Math.floor(distanceTraveled) + 'm');
+ // Increase game speed gradually
+ gameSpeed = 1 + distanceTraveled * 0.001;
+ // Generate new anchors as player moves up
+ if (player.y < lastAnchorY + 500) {
+ for (var i = 0; i < 3; i++) {
+ var anchorX = 200 + Math.random() * 1648;
+ var anchorY = lastAnchorY - 250 - Math.random() * 200;
+ generateAnchor(anchorX, anchorY);
+ }
+ lastAnchorY -= 300;
+ }
+ // Generate new walls
+ if (player.y < lastWallY + 600) {
+ var wallCount = 1 + Math.floor(Math.random() * 3);
+ for (var i = 0; i < wallCount; i++) {
+ var wallX = Math.random() * 1648 + 200;
+ var wallY = lastWallY - 400 - Math.random() * 200;
+ var wallWidth = 150 + Math.random() * 400;
+ generateWall(wallX, wallY, wallWidth, 40);
+ }
+ lastWallY -= 400;
+ }
+ // Clean up old anchors
+ for (var i = anchors.length - 1; i >= 0; i--) {
+ var anchor = anchors[i];
+ if (anchor.y > player.y + 1000) {
+ anchor.destroy();
+ anchors.splice(i, 1);
+ }
+ }
+ // Clean up old walls
+ for (var i = walls.length - 1; i >= 0; i--) {
+ var wall = walls[i];
+ if (wall.y > player.y + 1000) {
+ wall.destroy();
+ walls.splice(i, 1);
+ }
+ }
+ // Check wall collisions
+ for (var i = 0; i < walls.length; i++) {
+ var wall = walls[i];
+ if (player.intersects(wall)) {
+ LK.effects.flashScreen(0xff0000, 1000);
+ LK.showGameOver();
+ return;
+ }
+ }
+ // Check boundaries
+ if (player.x < 0 || player.x > 2048 || player.y > 2732 + 200) {
+ LK.effects.flashScreen(0xff0000, 1000);
+ LK.showGameOver();
+ return;
+ }
+ // Camera follow (move everything down as player moves up)
+ if (player.y < 1366) {
+ var offset = 1366 - player.y;
+ player.y = 1366;
+ // Move all anchors down
+ for (var i = 0; i < anchors.length; i++) {
+ anchors[i].y += offset;
+ }
+ // Move all walls down
+ for (var i = 0; i < walls.length; i++) {
+ walls[i].y += offset;
+ }
+ lastAnchorY += offset;
+ lastWallY += offset;
+ }
+};
\ No newline at end of file