User prompt
Temas olmasa bile blok havada duruyor çarpışma algılama kötü
User prompt
Eger temas alanı alt blogun 4 te birinden az ise blok düşer ve kaybolur
User prompt
Çarpışma algılama temas bölgesi 4/1 ise blok düşmeye devam eder
User prompt
Oyında bulunan 2 farklı çarpışma algılamadan birini kaldır
User prompt
Blok düşme hızını 25 yap
User prompt
Düşme hızını biraz arttır
User prompt
Blok düşme hızını sabitle böylece çarpışma sekronizasyonu düzelir
User prompt
Çeyrek kapsama kontrolünü düzelt ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
Çarpışma ve fizik kuralları ekle ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
Carpışma fizigi ekle
User prompt
Eger temas noktasında 4/1 den azsa düşme fizigi ekke ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
Carpışmaya fizik kuralları ekle ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
Gerekli ayarları yap ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
Eger üstteki blok düşüşte alttaki blogun 4/1 alanına temas ediyorsa dönerek dogal olarak düşsün oyuncu can kaybeder ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
Olmuyor oyun bozuldu
User prompt
Hedef kaynagı yarat ve düzenle
User prompt
Üstteki kırmızı blok dülerken bazen alttaki blogu görmezden geliyor
User prompt
Asagı yukarı sallanmayıda aktif et ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
Düşen blok bazen düşmesi gereken bölgeyi aşıyor ve tekrar birden blogun üzerinde beliriyor
User prompt
Saga sola sallantıyı genişlet ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
Düşme sırasında carpması gereken blogu aşarak asagı gidip birdan blogun üzerinde beliriyor
User prompt
Kırmızı blok düşmeye başladıgında dogal davransın ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
Sallantı dogal ve ve hiç durmasın ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
İp başlangıcı ekran üste degmeli
User prompt
İpi ve blogu biraz asagı dogru uzat
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); /**** * Classes ****/ var StackedBlock = Container.expand(function () { var self = Container.call(this); var block = self.attachAsset('block', { anchorX: 0.5, anchorY: 0.5 }); return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x87ceeb }); /**** * Game Code ****/ // Game state var stackedBlocks = []; var gameHeight = 2732; var gameWidth = 2048; var groundLevel = gameHeight - 120; var stackHeight = 0; var gameActive = true; // Create foundation block var foundation = new StackedBlock(); foundation.x = gameWidth / 2; foundation.y = gameHeight - 120; // Move to bottom of screen game.addChild(foundation); stackedBlocks.push(foundation); stackHeight = foundation.y; // Create rope hanging from top center var rope = LK.getAsset('rope', { anchorX: 0.5, anchorY: 0 }); rope.x = gameWidth / 2; rope.y = 0; // Rope starts at top of screen game.addChild(rope); // Create swinging block at the end of rope var swingingBlock = LK.getAsset('swingingBlock', { anchorX: 0.5, anchorY: 0.5 }); swingingBlock.x = 0; swingingBlock.y = rope.height + 100; // Extend the rope length by moving block further down rope.addChild(swingingBlock); // Natural pendulum swing variables var swingTime = 0; var swingSpeed = 0.03; // Controls swing speed var swingAmplitude = 0.6; // Controls swing range (max rotation) // Score display var scoreTxt = new Text2('Blocks: 0', { size: 80, fill: 0xFFFFFF }); scoreTxt.anchor.set(0.5, 0); LK.gui.top.addChild(scoreTxt); // Touch handler to drop the block game.down = function (x, y, obj) { if (!gameActive || !swingingBlock.parent) return; // Get the current world position of the swinging block var worldPos = rope.toGlobal(swingingBlock.position); var gamePos = game.toLocal(worldPos); // Detach from rope and add to game rope.removeChild(swingingBlock); game.addChild(swingingBlock); // Set position in game coordinates swingingBlock.x = gamePos.x; swingingBlock.y = gamePos.y; // Add falling velocity swingingBlock.velocityY = 8; // Start with constant speed swingingBlock.falling = true; }; // Update function for falling blocks game.update = function () { // Update rope swing with natural pendulum motion if (rope && !swingingBlock.falling) { swingTime += swingSpeed; rope.rotation = Math.sin(swingTime) * swingAmplitude; // Add vertical swinging motion to the swinging block var verticalOffset = Math.cos(swingTime * 2) * 30; // Vertical swing with smaller amplitude swingingBlock.y = rope.height + 100 + verticalOffset; } if (swingingBlock.falling) { // Use constant falling speed instead of accelerating gravity swingingBlock.velocityY = 8; // Fixed falling speed swingingBlock.y += swingingBlock.velocityY; // Check collision with any stacked block using Y position bounds var hasCollision = false; var nextY = swingingBlock.y + swingingBlock.velocityY; for (var i = 0; i < stackedBlocks.length; i++) { var block = stackedBlocks[i]; var blockTop = block.y - block.height / 2; var blockBottom = block.y + block.height / 2; var swingingTop = swingingBlock.y - swingingBlock.height / 2; var swingingBottom = nextY + swingingBlock.height / 2; // Check if falling block will intersect or has passed through this block if (swingingTop <= blockBottom && swingingBottom >= blockTop) { // Also check X overlap for more accurate collision var swingingLeft = swingingBlock.x - swingingBlock.width / 2; var swingingRight = swingingBlock.x + swingingBlock.width / 2; var blockLeft = block.x - block.width / 2; var blockRight = block.x + block.width / 2; if (swingingLeft < blockRight && swingingRight > blockLeft) { hasCollision = true; break; } } } if (hasCollision) { // Find the topmost block that the swinging block collided with var targetBlock = null; var highestY = gameHeight; for (var k = 0; k < stackedBlocks.length; k++) { if (swingingBlock.intersects(stackedBlocks[k]) && stackedBlocks[k].y < highestY) { targetBlock = stackedBlocks[k]; highestY = stackedBlocks[k].y; } } if (targetBlock) { // Check if the swinging block covers at least half of the target block var swingingLeft = swingingBlock.x - swingingBlock.width / 2; var swingingRight = swingingBlock.x + swingingBlock.width / 2; var targetLeft = targetBlock.x - targetBlock.width / 2; var targetRight = targetBlock.x + targetBlock.width / 2; // Calculate overlap var overlapLeft = Math.max(swingingLeft, targetLeft); var overlapRight = Math.min(swingingRight, targetRight); var overlapWidth = Math.max(0, overlapRight - overlapLeft); // Check if overlap is at least half of the target block width var requiredCoverage = targetBlock.width / 2; if (overlapWidth >= requiredCoverage) { // Award 1 point LK.setScore(LK.getScore() + 1); scoreTxt.setText('Blocks: ' + LK.getScore()); // Place block on stack swingingBlock.falling = false; swingingBlock.velocityY = 0; stackHeight -= 240; // Move stack up by block height swingingBlock.y = stackHeight; stackedBlocks.push(swingingBlock); // If this is the second red block (score 2), start sliding foundation down if (LK.getScore() >= 2) { // Move foundation and all stacked blocks down by one block height for (var j = 0; j < stackedBlocks.length; j++) { tween(stackedBlocks[j], { y: stackedBlocks[j].y + 240 }, { duration: 500, easing: tween.easeInOut }); } // Update stack height stackHeight += 240; } // Create new swinging block swingingBlock = LK.getAsset('swingingBlock', { anchorX: 0.5, anchorY: 0.5 }); swingingBlock.x = 0; swingingBlock.y = rope.height + 100; rope.addChild(swingingBlock); } else { // Not enough coverage - continue falling swingingBlock.falling = true; } } } // Check if block has fallen below the screen else if (swingingBlock.y > gameHeight + 200) { // Game over - player missed the target gameActive = false; LK.showGameOver(); } } }; ;
===================================================================
--- original.js
+++ change.js
@@ -78,10 +78,9 @@
// Set position in game coordinates
swingingBlock.x = gamePos.x;
swingingBlock.y = gamePos.y;
// Add falling velocity
- swingingBlock.velocityY = 0;
- swingingBlock.gravity = 0.8;
+ swingingBlock.velocityY = 8; // Start with constant speed
swingingBlock.falling = true;
};
// Update function for falling blocks
game.update = function () {
@@ -93,13 +92,14 @@
var verticalOffset = Math.cos(swingTime * 2) * 30; // Vertical swing with smaller amplitude
swingingBlock.y = rope.height + 100 + verticalOffset;
}
if (swingingBlock.falling) {
- swingingBlock.velocityY += swingingBlock.gravity;
+ // Use constant falling speed instead of accelerating gravity
+ swingingBlock.velocityY = 8; // Fixed falling speed
swingingBlock.y += swingingBlock.velocityY;
// Check collision with any stacked block using Y position bounds
var hasCollision = false;
- var nextY = swingingBlock.y + swingingBlock.velocityY + swingingBlock.gravity;
+ var nextY = swingingBlock.y + swingingBlock.velocityY;
for (var i = 0; i < stackedBlocks.length; i++) {
var block = stackedBlocks[i];
var blockTop = block.y - block.height / 2;
var blockBottom = block.y + block.height / 2;
@@ -139,29 +139,9 @@
var overlapRight = Math.min(swingingRight, targetRight);
var overlapWidth = Math.max(0, overlapRight - overlapLeft);
// Check if overlap is at least half of the target block width
var requiredCoverage = targetBlock.width / 2;
- // Check for quarter coverage (1/4) to trigger natural fall with rotation
- var quarterCoverage = targetBlock.width / 4;
- if (overlapWidth > 0 && overlapWidth <= quarterCoverage) {
- // Block is barely touching - make it fall naturally with rotation
- swingingBlock.falling = true;
- swingingBlock.velocityY = Math.max(swingingBlock.velocityY, 2); // Ensure some downward velocity
- // Add natural rotation based on which side is touching
- var rotationDirection = swingingBlock.x < targetBlock.x ? -1 : 1;
- tween(swingingBlock, {
- rotation: swingingBlock.rotation + rotationDirection * Math.PI * 2
- }, {
- duration: 1500,
- easing: tween.easeOut
- });
- // Game over - player loses
- gameActive = false;
- LK.setTimeout(function () {
- LK.showGameOver();
- }, 800); // Delay to show the rotation effect
- return; // Exit early to prevent further collision checks
- } else if (overlapWidth >= requiredCoverage) {
+ if (overlapWidth >= requiredCoverage) {
// Award 1 point
LK.setScore(LK.getScore() + 1);
scoreTxt.setText('Blocks: ' + LK.getScore());
// Place block on stack