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 = 200; // Move rope down from top 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); // Start rope swinging animation function startRopeSwing() { // Swing right tween(rope, { rotation: 0.5 }, { duration: 1500, easing: tween.easeInOut, onFinish: function onFinish() { // Swing left tween(rope, { rotation: -0.5 }, { duration: 3000, easing: tween.easeInOut, onFinish: function onFinish() { // Swing back right and repeat tween(rope, { rotation: 0.5 }, { duration: 3000, easing: tween.easeInOut, onFinish: startRopeSwing }); } }); } }); } // Start the swinging motion startRopeSwing(); // 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 = 0; swingingBlock.gravity = 0.8; swingingBlock.falling = true; }; // Update function for falling blocks game.update = function () { if (swingingBlock.falling) { swingingBlock.velocityY += swingingBlock.gravity; swingingBlock.y += swingingBlock.velocityY; // Check collision with any stacked block var hasCollision = false; for (var i = 0; i < stackedBlocks.length; i++) { if (swingingBlock.intersects(stackedBlocks[i])) { 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(); } } }; ;
/****
* 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 = 200; // Move rope down from top
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);
// Start rope swinging animation
function startRopeSwing() {
// Swing right
tween(rope, {
rotation: 0.5
}, {
duration: 1500,
easing: tween.easeInOut,
onFinish: function onFinish() {
// Swing left
tween(rope, {
rotation: -0.5
}, {
duration: 3000,
easing: tween.easeInOut,
onFinish: function onFinish() {
// Swing back right and repeat
tween(rope, {
rotation: 0.5
}, {
duration: 3000,
easing: tween.easeInOut,
onFinish: startRopeSwing
});
}
});
}
});
}
// Start the swinging motion
startRopeSwing();
// 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 = 0;
swingingBlock.gravity = 0.8;
swingingBlock.falling = true;
};
// Update function for falling blocks
game.update = function () {
if (swingingBlock.falling) {
swingingBlock.velocityY += swingingBlock.gravity;
swingingBlock.y += swingingBlock.velocityY;
// Check collision with any stacked block
var hasCollision = false;
for (var i = 0; i < stackedBlocks.length; i++) {
if (swingingBlock.intersects(stackedBlocks[i])) {
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();
}
}
};
;