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 (size) {
var self = Container.call(this);
// Determine anchor asset and properties based on size
self.size = size || 'medium';
var assetName = 'anchor_' + self.size;
var anchorGraphics = self.attachAsset(assetName, {
anchorX: 0.5,
anchorY: 0.5
});
// Range and score vary by size - increased ranges for better grappling
if (self.size === 'small') {
self.range = 200;
self.scoreValue = 15;
} else if (self.size === 'large') {
self.range = 280;
self.scoreValue = 5;
} else {
self.range = 240;
self.scoreValue = 10;
}
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 GrappleLine = Container.expand(function () {
var self = Container.call(this);
self.segments = [];
self.createLine = function (startX, startY, endX, endY) {
// Clear existing segments
for (var i = 0; i < self.segments.length; i++) {
self.segments[i].destroy();
}
self.segments = [];
// Calculate line segments
var distance = Math.sqrt(Math.pow(endX - startX, 2) + Math.pow(endY - startY, 2));
var segmentCount = Math.floor(distance / 20); // One segment every 20 pixels
for (var i = 0; i < segmentCount; i++) {
var t = i / segmentCount;
var segmentX = startX + (endX - startX) * t;
var segmentY = startY + (endY - startY) * t;
var segment = self.attachAsset('grapple_line', {
anchorX: 0.5,
anchorY: 0.5
});
segment.x = segmentX;
segment.y = segmentY;
self.segments.push(segment);
}
};
self.clear = function () {
for (var i = 0; i < self.segments.length; i++) {
self.segments[i].destroy();
}
self.segments = [];
};
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.grappleLine = null;
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;
// Update grapple line
if (self.grappleLine) {
self.grappleLine.createLine(self.x, self.y, self.grappleAnchor.x, self.grappleAnchor.y);
}
} 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);
// Create grapple line
if (!self.grappleLine) {
self.grappleLine = game.addChild(new GrappleLine());
}
self.grappleLine.createLine(self.x, self.y, anchor.x, anchor.y);
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;
// Clear grapple line
if (self.grappleLine) {
self.grappleLine.clear();
}
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 sizes = ['small', 'medium', 'large'];
var randomSize = sizes[Math.floor(Math.random() * sizes.length)];
var anchor = new Anchor(randomSize);
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;
}
// Walls removed - no obstacles to crash into
// Touch input - improved grappling mechanism
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() + nearestAnchor.scoreValue);
scoreTxt.setText(LK.getScore());
}
}
} else {
// Always release on tap when grappling
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;
}
// Wall generation removed
// 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);
}
}
// Wall cleanup removed
// Wall collisions removed
// 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;
}
lastAnchorY += offset;
}
}; ===================================================================
--- original.js
+++ change.js
@@ -14,17 +14,17 @@
var anchorGraphics = self.attachAsset(assetName, {
anchorX: 0.5,
anchorY: 0.5
});
- // Range and score vary by size
+ // Range and score vary by size - increased ranges for better grappling
if (self.size === 'small') {
- self.range = 120;
+ self.range = 200;
self.scoreValue = 15;
} else if (self.size === 'large') {
- self.range = 180;
+ self.range = 280;
self.scoreValue = 5;
} else {
- self.range = 150;
+ self.range = 240;
self.scoreValue = 10;
}
self.used = false;
self.update = function () {
@@ -238,16 +238,10 @@
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
+// Walls removed - no obstacles to crash into
+// Touch input - improved grappling mechanism
game.down = function (x, y, obj) {
if (!player.isGrappling) {
// Find nearest anchor in range
var nearestAnchor = null;
@@ -270,8 +264,9 @@
scoreTxt.setText(LK.getScore());
}
}
} else {
+ // Always release on tap when grappling
player.releaseGrapple();
}
};
// Game update loop
@@ -289,44 +284,19 @@
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;
- }
+ // Wall generation removed
// 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;
- }
- }
+ // Wall cleanup removed
+ // Wall collisions removed
// Check boundaries
if (player.x < 0 || player.x > 2048 || player.y > 2732 + 200) {
LK.effects.flashScreen(0xff0000, 1000);
LK.showGameOver();
@@ -339,12 +309,7 @@
// 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