Code edit (1 edits merged)
Please save this source code
Code edit (1 edits merged)
Please save this source code
Code edit (1 edits merged)
Please save this source code
Code edit (1 edits merged)
Please save this source code
User prompt
Please fix the bug: 'LK.Graphics is not a constructor' in or related to this line: 'var ropeGraphics = new LK.Graphics();' Line Number: 111
Code edit (2 edits merged)
Please save this source code
User prompt
Please fix the bug: 'LK.Graphics is not a constructor' in or related to this line: 'var ropeGraphics = new LK.Graphics();' Line Number: 107
Code edit (3 edits merged)
Please save this source code
User prompt
Plugins failed to load. Please try again and if the problem persists, please contact technical support i got this error
User prompt
var tween = LK.import("@upit/tween.v1"); this is the problem ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
still have problem
User prompt
fix the error please
Code edit (1 edits merged)
Please save this source code
User prompt
Crane Balance Master
Initial prompt
I want to create a balancing game with square containers dropped from a crane. The surroundings can be a construction site.
/**** * Classes ****/ var Crane = Container.expand(function () { var self = Container.call(this); var craneGraphics = self.attachAsset('crane', { anchorX: 0.5, anchorY: 0.5 }); self.direction = 1; self.speed = 2; self.update = function () { self.x += self.direction * self.speed; if (self.x <= 200) { self.direction = 1; } else if (self.x >= 1848) { self.direction = -1; } }; return self; }); var GameContainer = Container.expand(function () { var self = Container.call(this); var containerGraphics = self.attachAsset('container', { anchorX: 0.5, anchorY: 0.5 }); self.velocity = { x: 0, y: 0 }; self.grounded = false; self.settled = false; self.settleTimer = 0; self.isAttached = true; self.intersects = function (other) { // Çarpışma mesafesini kutu boyutlarına tam uyumlu hale getir return Math.abs(self.x - other.x) < 100 && Math.abs(self.y - other.y) < 100; }; self.update = function () { if (self.isAttached) { return; } if (!self.grounded) { self.velocity.y += 0.8; self.x += self.velocity.x; self.y += self.velocity.y; if (self.y >= platformY - 50) { var hitSomething = false; // Platformla çarpışma if (self.x >= platformX - 250 && self.x <= platformX + 250) { self.y = platformY - 50; // Platformun tam üstü hitSomething = true; } // Diğer kutularla çarpışma for (var i = 0; i < containers.length; i++) { var other = containers[i]; if (other !== self && other.grounded && self.intersects(other)) { self.y = other.y - 100; // Alttaki kutunun tam üstü hitSomething = true; break; } } if (hitSomething) { self.grounded = true; self.velocity.y = 0; self.velocity.x *= 0.3; self.settleTimer = 60; LK.getSound('stack').play(); // Hata ayıklama için konumları logla console.log("Kutu yerleşti: x=" + self.x + ", y=" + self.y); } } if (self.y > 2732 + 100) { self.destroy(); containers.splice(containers.indexOf(self), 1); LK.showGameOver(); } } else { if (self.settleTimer > 0) { self.settleTimer--; if (self.settleTimer <= 0) { self.settled = true; } } if (Math.abs(self.velocity.x) > 0.1) { self.x += self.velocity.x; self.velocity.x *= 0.95; } } }; return self; }); var Hook = Container.expand(function () { var self = Container.call(this); var hookGraphics = self.attachAsset('hook', { anchorX: 0.5, anchorY: 0.5 }); var ropeGraphics = self.attachAsset('rope', { anchorX: 0.5, anchorY: 0 }); ropeGraphics.visible = false; self.hasContainer = false; self.attachedContainer = null; self.update = function () { self.x = crane.x; if (self.hasContainer && self.attachedContainer) { ropeGraphics.visible = true; var ropeLength = Math.abs(self.attachedContainer.y - self.y); ropeGraphics.height = ropeLength; ropeGraphics.x = 0; ropeGraphics.y = ropeLength / 2; self.attachedContainer.x = self.x; self.attachedContainer.y = self.y + 80; } else { ropeGraphics.visible = false; } }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x87CEEB }); /**** * Game Code ****/ var containers = []; var crane; var hook; var platform; var ground; var platformX = 2048 / 2; var platformY = 2732 - 300; var scoreText; var nextContainerTimer = 0; var gameSpeed = 1; ground = game.addChild(LK.getAsset('ground', { anchorX: 0.5, anchorY: 0.5, x: 2048 / 2, y: 2732 - 50 })); platform = game.addChild(LK.getAsset('platform', { anchorX: 0.5, anchorY: 0.5, x: platformX, y: platformY })); crane = game.addChild(new Crane()); crane.x = 2048 / 2; crane.y = 550; hook = game.addChild(new Hook()); hook.x = crane.x; hook.y = crane.y; scoreText = new Text2('Score: 0', { size: 80, fill: 0x000000 }); scoreText.anchor.set(0.5, 0); LK.gui.top.addChild(scoreText); function createNewContainer() { var newContainer = new GameContainer(); newContainer.x = hook.x; newContainer.y = hook.y + 80; newContainer.isAttached = true; containers.push(newContainer); game.addChild(newContainer); hook.hasContainer = true; hook.attachedContainer = newContainer; } function dropContainer() { if (hook.hasContainer && hook.attachedContainer) { hook.attachedContainer.isAttached = false; hook.attachedContainer.velocity.x = crane.direction * crane.speed * 0.5; hook.attachedContainer.velocity.y = 2; hook.hasContainer = false; hook.attachedContainer = null; LK.getSound('drop').play(); LK.setScore(LK.getScore() + 10); scoreText.setText('Score: ' + LK.getScore()); nextContainerTimer = 120; if (LK.getScore() % 100 === 0) { crane.speed += 0.5; } } } createNewContainer(); game.down = function (x, y, obj) { dropContainer(); }; game.update = function () { if (nextContainerTimer > 0) { nextContainerTimer--; if (nextContainerTimer <= 0 && !hook.hasContainer) { createNewContainer(); } } for (var i = containers.length - 1; i >= 0; i--) { var container = containers[i]; if (container.grounded && (container.x < platformX - 250 || container.x > platformX + 250)) { LK.effects.flashScreen(0xff0000, 500); LK.setTimeout(function () { LK.showGameOver(); }, 500); break; } } if (LK.getScore() >= 500) { LK.showYouWin(); } };
===================================================================
--- original.js
+++ change.js
@@ -6,12 +6,92 @@
var craneGraphics = self.attachAsset('crane', {
anchorX: 0.5,
anchorY: 0.5
});
- // Vinç sabit kalacağı için update fonksiyonuna gerek yok
- self.update = function () {};
+ self.direction = 1;
+ self.speed = 2;
+ self.update = function () {
+ self.x += self.direction * self.speed;
+ if (self.x <= 200) {
+ self.direction = 1;
+ } else if (self.x >= 1848) {
+ self.direction = -1;
+ }
+ };
return self;
});
+var GameContainer = Container.expand(function () {
+ var self = Container.call(this);
+ var containerGraphics = self.attachAsset('container', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.velocity = {
+ x: 0,
+ y: 0
+ };
+ self.grounded = false;
+ self.settled = false;
+ self.settleTimer = 0;
+ self.isAttached = true;
+ self.intersects = function (other) {
+ // Çarpışma mesafesini kutu boyutlarına tam uyumlu hale getir
+ return Math.abs(self.x - other.x) < 100 && Math.abs(self.y - other.y) < 100;
+ };
+ self.update = function () {
+ if (self.isAttached) {
+ return;
+ }
+ if (!self.grounded) {
+ self.velocity.y += 0.8;
+ self.x += self.velocity.x;
+ self.y += self.velocity.y;
+ if (self.y >= platformY - 50) {
+ var hitSomething = false;
+ // Platformla çarpışma
+ if (self.x >= platformX - 250 && self.x <= platformX + 250) {
+ self.y = platformY - 50; // Platformun tam üstü
+ hitSomething = true;
+ }
+ // Diğer kutularla çarpışma
+ for (var i = 0; i < containers.length; i++) {
+ var other = containers[i];
+ if (other !== self && other.grounded && self.intersects(other)) {
+ self.y = other.y - 100; // Alttaki kutunun tam üstü
+ hitSomething = true;
+ break;
+ }
+ }
+ if (hitSomething) {
+ self.grounded = true;
+ self.velocity.y = 0;
+ self.velocity.x *= 0.3;
+ self.settleTimer = 60;
+ LK.getSound('stack').play();
+ // Hata ayıklama için konumları logla
+ console.log("Kutu yerleşti: x=" + self.x + ", y=" + self.y);
+ }
+ }
+ if (self.y > 2732 + 100) {
+ self.destroy();
+ containers.splice(containers.indexOf(self), 1);
+ LK.showGameOver();
+ }
+ } else {
+ if (self.settleTimer > 0) {
+ self.settleTimer--;
+ if (self.settleTimer <= 0) {
+ self.settled = true;
+ }
+ }
+ if (Math.abs(self.velocity.x) > 0.1) {
+ self.x += self.velocity.x;
+ self.velocity.x *= 0.95;
+ }
+ }
+ };
+ return self;
+});
var Hook = Container.expand(function () {
var self = Container.call(this);
var hookGraphics = self.attachAsset('hook', {
anchorX: 0.5,
@@ -20,38 +100,23 @@
var ropeGraphics = self.attachAsset('rope', {
anchorX: 0.5,
anchorY: 0
});
- ropeGraphics.visible = true; // İp varsayılan olarak görünür
+ ropeGraphics.visible = false;
self.hasContainer = false;
self.attachedContainer = null;
- self.direction = 1; // Kanca hareket yönü
- self.speed = 2; // Kanca hareket hızı
- self.timer = 0; // Sallanma için zamanlayıcı
self.update = function () {
- // Kanca sağa-sola hareket eder
- self.x += self.direction * self.speed;
- // Hareket sınırları
- if (self.x <= 200) {
- self.direction = 1;
- } else if (self.x >= 1848) {
- self.direction = -1;
- }
- // Sallanma efekti için zamanlayıcıyı artır
- self.timer += 0.1;
- // İp görünümünü vinç ile kanca arasında güncelle
- var ropeLength = Math.abs(self.y - crane.y); // Vinç ile kanca arasındaki y mesafesi
- ropeGraphics.height = ropeLength; // İpin uzunluğu
- // Sallanma efekti: sinüs dalgası ile x ofseti
- var swayAmplitude = 10; // Sallanma genliği (piksel)
- var swayFrequency = 0.5; // Sallanma frekansı
- var swayOffset = Math.sin(self.timer * swayFrequency) * swayAmplitude;
- ropeGraphics.x = crane.x - self.x + swayOffset; // İpin x ofseti + sallanma
- ropeGraphics.y = ropeLength / 12; // İpin y pozisyonu
- // Konteyner bağlıysa, konteyneri kancaya göre güncelle
+ self.x = crane.x;
if (self.hasContainer && self.attachedContainer) {
+ ropeGraphics.visible = true;
+ var ropeLength = Math.abs(self.attachedContainer.y - self.y);
+ ropeGraphics.height = ropeLength;
+ ropeGraphics.x = 0;
+ ropeGraphics.y = ropeLength / 2;
self.attachedContainer.x = self.x;
self.attachedContainer.y = self.y + 80;
+ } else {
+ ropeGraphics.visible = false;
}
};
return self;
});
@@ -88,13 +153,13 @@
x: platformX,
y: platformY
}));
crane = game.addChild(new Crane());
-crane.x = 575; // Vinç ortada sabit
-crane.y = 1250; // Vinç y pozisyonu (önceki ayara göre)
+crane.x = 2048 / 2;
+crane.y = 550;
hook = game.addChild(new Hook());
-hook.x = crane.x; // Kanca başlangıçta vinçle aynı x pozisyonunda
-hook.y = 500; // Kanca y pozisyonu (önceki ayara göre)
+hook.x = crane.x;
+hook.y = crane.y;
scoreText = new Text2('Score: 0', {
size: 80,
fill: 0x000000
});
@@ -112,17 +177,42 @@
}
function dropContainer() {
if (hook.hasContainer && hook.attachedContainer) {
hook.attachedContainer.isAttached = false;
- hook.attachedContainer.velocity.x = hook.direction * hook.speed * 0.5; // Kanca hızını kullan
+ hook.attachedContainer.velocity.x = crane.direction * crane.speed * 0.5;
hook.attachedContainer.velocity.y = 2;
hook.hasContainer = false;
hook.attachedContainer = null;
LK.getSound('drop').play();
LK.setScore(LK.getScore() + 10);
scoreText.setText('Score: ' + LK.getScore());
nextContainerTimer = 120;
if (LK.getScore() % 100 === 0) {
- hook.speed += 0.5; // Kanca hızını artır
+ crane.speed += 0.5;
}
}
-}
\ No newline at end of file
+}
+createNewContainer();
+game.down = function (x, y, obj) {
+ dropContainer();
+};
+game.update = function () {
+ if (nextContainerTimer > 0) {
+ nextContainerTimer--;
+ if (nextContainerTimer <= 0 && !hook.hasContainer) {
+ createNewContainer();
+ }
+ }
+ for (var i = containers.length - 1; i >= 0; i--) {
+ var container = containers[i];
+ if (container.grounded && (container.x < platformX - 250 || container.x > platformX + 250)) {
+ LK.effects.flashScreen(0xff0000, 500);
+ LK.setTimeout(function () {
+ LK.showGameOver();
+ }, 500);
+ break;
+ }
+ }
+ if (LK.getScore() >= 500) {
+ LK.showYouWin();
+ }
+};
\ No newline at end of file