User prompt
nesneler şişe dokunmadan, yakınından geçerken puan alabiliyorum. şiş nesneye tam temas etmeli
User prompt
şiş ekranın yarısından yukarı çıkamasın.
User prompt
Please fix the bug: 'ReferenceError: skewerFiring is not defined' in or related to this line: 'if (skewerFiring) {' Line Number: 126
User prompt
şiş istediğimiz gibi hareket ettirelim ve dik konumda olsun. şişe ile her nesneyi aldığımızda küçük bir efekt olsun şişin ucunda ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
şişe tıkladığım da ekranın diğer köşesine kadar gitsin gelsin. ve gidiş geliş hızı biraz daha yüksek olsun ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
şiş ekranın sol alt köşesinde çarpaz şekilde dursun. üzerine tıkladığımızda ileri doğru gidip nesneleri yakalasın. nesneler bir tık daha yavaş düşebilir.
User prompt
arka plan rengini değiştir. gökyüzü mavisi yada turkuaz gibi olabilir
User prompt
arka plan görselini farklı kullan
Code edit (1 edits merged)
Please save this source code
User prompt
Şişli Yakala
Initial prompt
bir adet şiş olacak. yukarıdan düşen sebzeleri ve köfteleri şiş ile yakalayacağız. arada bomba düşecek şiş ile onu yakalarsak oyun bitecek. sebze veya köfte yere düşerse oyun yine bitecek
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); /**** * Classes ****/ // Düşen yiyecek ve bomba için temel sınıf var FallingItem = Container.expand(function () { var self = Container.call(this); // .type, .speed, .assetId dışarıdan atanacak self.update = function () { self.y += self.speed; }; return self; }); // Şiş (Skewer) class var Skewer = Container.expand(function () { var self = Container.call(this); var skewerAsset = self.attachAsset('skewer', { anchorX: 0.5, anchorY: 0.5 }); // Düz (dik) konumda başlat self.rotation = 0; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x7ed6df // Gökyüzü mavisi/turkuaz arka plan }); /**** * Game Code ****/ // Arka plan görselini ekle var bgAsset = LK.getAsset('Biber', { anchorX: 0, anchorY: 0, x: 0, y: 0, width: GAME_WIDTH, height: GAME_HEIGHT }); game.addChildAt(bgAsset, 0); // En arkaya ekle // Bomba (bomb) - siyah // Köfte (meatball) - kahverengi // Sebze (vegetable) - yeşil // Şiş (skewer) // Oyun alanı boyutları var GAME_WIDTH = 2048; var GAME_HEIGHT = 2732; // Skewer oluştur ve konumlandır var skewer = new Skewer(); game.addChild(skewer); // Sol alt köşede, dik başlat skewer.x = 180; skewer.y = GAME_HEIGHT - 180; skewer.rotation = 0; // Düz (dik) konumda // Skewer'ın hareketi için sürükleme değişkenleri var dragging = false; // Skor metni var scoreTxt = new Text2('0', { size: 120, fill: 0x7C4D03 }); // Skewer fırlama animasyonu için kullanılmayan değişkenler (eski koddan kalma, bug fix için false başlat) var skewerFiring = false; var skewerFireProgress = 0; var skewerFireDuration = 0; var skewerFireStart = { x: 0, y: 0 }; var skewerFireTarget = { x: 0, y: 0 }; scoreTxt.anchor.set(0.5, 0); LK.gui.top.addChild(scoreTxt); // Skor var score = 0; // Düşen nesneler dizisi var fallingItems = []; // Oyun bitti mi kontrolü var gameOver = false; // Rastgele item türü seçimi function getRandomItemType() { // %40 sebze, %40 köfte, %20 bomba var r = Math.random(); if (r < 0.4) return 'veggie'; if (r < 0.8) return 'meatball'; return 'bomb'; } // Yeni düşen nesne oluştur function spawnFallingItem() { var itemType = getRandomItemType(); var item = new FallingItem(); item.type = itemType; item.assetId = itemType; item.speed = 7 + Math.random() * 4; // 7-11 px/sn, biraz daha yavaş // Asset ekle var asset = item.attachAsset(item.assetId, { anchorX: 0.5, anchorY: 0.5 }); // Rastgele x, kenarlara taşmasın var margin = 100 + asset.width / 2; item.x = margin + Math.random() * (GAME_WIDTH - 2 * margin); item.y = -asset.height / 2; fallingItems.push(item); game.addChild(item); } // Oyun güncelleme fonksiyonu game.update = function () { if (gameOver) return; // Skewer fırlama animasyonu if (skewerFiring) { skewerFireProgress++; var t = skewerFireProgress / skewerFireDuration; if (t < 0.5) { // İleri giderken var tt = t * 2; skewer.x = skewerFireStart.x + (skewerFireTarget.x - skewerFireStart.x) * tt; skewer.y = skewerFireStart.y + (skewerFireTarget.y - skewerFireStart.y) * tt; } else if (t < 1) { // Geri dönerken var tt = (t - 0.5) * 2; skewer.x = skewerFireTarget.x + (skewerFireStart.x - skewerFireTarget.x) * tt; skewer.y = skewerFireTarget.y + (skewerFireStart.y - skewerFireTarget.y) * tt; } else { // Animasyon bitti skewer.x = skewerFireStart.x; skewer.y = skewerFireStart.y; skewerFiring = false; } } // Düşen nesneleri güncelle for (var i = fallingItems.length - 1; i >= 0; i--) { var item = fallingItems[i]; item.update(); // Yere değdi mi? if (item.y - item.height / 2 > GAME_HEIGHT) { if (item.type === 'veggie' || item.type === 'meatball') { // Yiyecek yere düştü, oyun biter LK.effects.flashScreen(0xff0000, 800); LK.showGameOver(); gameOver = true; return; } else { // Bomba yere düştü, sadece sil item.destroy(); fallingItems.splice(i, 1); continue; } } // Şiş ile çarpışma kontrolü // Temas anını hassas şekilde tespit etmek için lastWasIntersecting kullan if (item.lastWasIntersecting === undefined) item.lastWasIntersecting = false; var isIntersecting = item.intersects(skewer); if (!item.lastWasIntersecting && isIntersecting) { if (item.type === 'bomb') { // Bomba yakalandı, oyun biter LK.effects.flashScreen(0xff0000, 800); LK.showGameOver(); gameOver = true; return; } else { // Yiyecek yakalandı, skor artır score += 1; LK.setScore(score); scoreTxt.setText(score); // Efekt: Şişin ucunda küçük bir parlama animasyonu var effect = LK.getAsset('veggie', { anchorX: 0.5, anchorY: 0.5, scaleX: 0.4, scaleY: 0.4 }); effect.x = skewer.x; effect.y = skewer.y - skewer.height / 2 + 40; // Şişin ucu game.addChild(effect); tween(effect, { scaleX: 1.1, scaleY: 1.1, alpha: 0 }, { duration: 320, easing: tween.cubicOut, onFinish: function onFinish() { effect.destroy(); } }); // Yakalanan itemi sil item.destroy(); fallingItems.splice(i, 1); continue; } } item.lastWasIntersecting = isIntersecting; } // Belirli aralıklarla yeni nesne oluştur if (LK.ticks % 36 === 0) { // ~1 adet/sn spawnFallingItem(); } }; // Skewer'ı sürüklemek için dokunma/taşıma olayları function clamp(val, min, max) { return Math.max(min, Math.min(max, val)); } game.down = function (x, y, obj) { // Sadece skewer'ın yakınında başlat var local = skewer.toLocal(game.toGlobal({ x: x, y: y })); if (Math.abs(local.x) < skewer.width / 2 + 80 && Math.abs(local.y) < skewer.height / 2 + 80) { dragging = true; moveSkewer(x, y); } }; game.move = function (x, y, obj) { if (dragging) { moveSkewer(x, y); } }; game.up = function (x, y, obj) { dragging = false; }; function moveSkewer(x, y) { // Hem yatay hem dikeyde sınırla, kenarlara taşmasın var halfWidth = skewer.width / 2; var halfHeight = skewer.height / 2; // Y ekseninde üst sınırı ekranın yarısı (halfHeight + 40 ile GAME_HEIGHT/2 - halfHeight arasında) skewer.x = clamp(x, halfWidth + 40, GAME_WIDTH - halfWidth - 40); skewer.y = clamp(y, GAME_HEIGHT / 2 + halfHeight, GAME_HEIGHT - halfHeight - 40); } // Oyun başında skor sıfırla score = 0; LK.setScore(0); scoreTxt.setText(score); // Oyun bittiğinde cleanup (LK.showGameOver çağrıldığında otomatik resetlenir)
===================================================================
--- original.js
+++ change.js
@@ -158,9 +158,12 @@
continue;
}
}
// Şiş ile çarpışma kontrolü
- if (item.intersects(skewer)) {
+ // Temas anını hassas şekilde tespit etmek için lastWasIntersecting kullan
+ if (item.lastWasIntersecting === undefined) item.lastWasIntersecting = false;
+ var isIntersecting = item.intersects(skewer);
+ if (!item.lastWasIntersecting && isIntersecting) {
if (item.type === 'bomb') {
// Bomba yakalandı, oyun biter
LK.effects.flashScreen(0xff0000, 800);
LK.showGameOver();
@@ -197,8 +200,9 @@
fallingItems.splice(i, 1);
continue;
}
}
+ item.lastWasIntersecting = isIntersecting;
}
// Belirli aralıklarla yeni nesne oluştur
if (LK.ticks % 36 === 0) {
// ~1 adet/sn
bomba. No background. Transparent background. Blank background. No shadows. 2d. In-Game asset. flat
köfte. No background. Transparent background. Blank background. No shadows. 2d. In-Game asset. flat
dikey bir kebab şişi. No background. Transparent background. Blank background. No shadows. 2d. In-Game asset. flat
domates. In-Game asset. 2d. High contrast. No shadows
biber. In-Game asset. 2d. High contrast. No shadows