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 }); // No update needed, position is set by player 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, çapraz başlat skewer.x = 120; skewer.y = GAME_HEIGHT - 120; skewer.rotation = -Math.PI / 4; // -45 derece çapraz // Fırlama hareketi için değişkenler var skewerFiring = false; var skewerFireStart = { x: skewer.x, y: skewer.y }; var skewerFireTarget = { x: skewer.x, y: skewer.y }; var skewerFireProgress = 0; var skewerFireDuration = 22; // Kaç frame ileri gitsin (yaklaşık 0.36sn) var skewerFireDistance = 800; // Ne kadar ileri gitsin (px) // 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 }); 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ü if (item.intersects(skewer)) { 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); // Yakalanan itemi sil item.destroy(); fallingItems.splice(i, 1); continue; } } } // 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) { // Fırlama başlat if (!skewerFiring) { skewerFiring = true; skewerFireStart.x = skewer.x; skewerFireStart.y = skewer.y; // Fırlama yönü: skewer'ın rotasyonuna göre ileri skewerFireTarget.x = skewer.x + Math.cos(skewer.rotation) * skewerFireDistance; skewerFireTarget.y = skewer.y + Math.sin(skewer.rotation) * skewerFireDistance; skewerFireProgress = 0; } } }; game.move = function (x, y, obj) { if (dragging) { moveSkewer(x, y); } }; game.up = function (x, y, obj) { dragging = false; }; function moveSkewer(x, y) { // Sadece yatay hareket, kenarlara taşmasın var halfWidth = skewer.width / 2; skewer.x = clamp(x, halfWidth + 40, GAME_WIDTH - halfWidth - 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
@@ -55,10 +55,25 @@
var GAME_HEIGHT = 2732;
// Skewer oluştur ve konumlandır
var skewer = new Skewer();
game.addChild(skewer);
-skewer.y = GAME_HEIGHT - 180;
-skewer.x = GAME_WIDTH / 2;
+// Sol alt köşede, çapraz başlat
+skewer.x = 120;
+skewer.y = GAME_HEIGHT - 120;
+skewer.rotation = -Math.PI / 4; // -45 derece çapraz
+// Fırlama hareketi için değişkenler
+var skewerFiring = false;
+var skewerFireStart = {
+ x: skewer.x,
+ y: skewer.y
+};
+var skewerFireTarget = {
+ x: skewer.x,
+ y: skewer.y
+};
+var skewerFireProgress = 0;
+var skewerFireDuration = 22; // Kaç frame ileri gitsin (yaklaşık 0.36sn)
+var skewerFireDistance = 800; // Ne kadar ileri gitsin (px)
// Skewer'ın hareketi için sürükleme değişkenleri
var dragging = false;
// Skor metni
var scoreTxt = new Text2('0', {
@@ -86,9 +101,9 @@
var itemType = getRandomItemType();
var item = new FallingItem();
item.type = itemType;
item.assetId = itemType;
- item.speed = 12 + Math.random() * 6; // 12-18 px/sn
+ 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
@@ -102,8 +117,29 @@
}
// 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();
@@ -158,10 +194,18 @@
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);
+ // Fırlama başlat
+ if (!skewerFiring) {
+ skewerFiring = true;
+ skewerFireStart.x = skewer.x;
+ skewerFireStart.y = skewer.y;
+ // Fırlama yönü: skewer'ın rotasyonuna göre ileri
+ skewerFireTarget.x = skewer.x + Math.cos(skewer.rotation) * skewerFireDistance;
+ skewerFireTarget.y = skewer.y + Math.sin(skewer.rotation) * skewerFireDistance;
+ skewerFireProgress = 0;
+ }
}
};
game.move = function (x, y, obj) {
if (dragging) {
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