User prompt
Arkaplan ekle
User prompt
Skor tablosu ekle sağa her tur dönüş icin 1 puan arttir. Sola donusler 1 puan eksiltsin 000000 şeklinde formatla.
User prompt
Ekrandaki yaziyi sil
User prompt
5 nolu gear sesi calmiyor
User prompt
5 nolu gear sesini aktif et.
User prompt
Ekranda olmayan bir gear çeşidine ait ses çalmasın.
User prompt
5 adet gear çeşidi ve 5 adet dönme sesi var. Her gear çeşidi icin kendisine ait donme sesini kullan
User prompt
5 adet gear çeşidi ve 5 adet dönme sesi var. Her gear icin farklı bir donme sesini kullan
User prompt
Her tur icin bir adim ses cal.
User prompt
Her gear icin kendi sesini cal.
User prompt
Ses çalmayı tekrar ele al. Her gear rotate adıminda ses cal
User prompt
Gearrotate5 ekle
User prompt
Ses sürekli calmiyor
User prompt
5. Ses ekle
Code edit (1 edits merged)
Please save this source code
User prompt
Gear1 icin gearrotate1 ve digerleri icinde kendi seslerini loop cal.
User prompt
Gear dondugu surece ses calsin
User prompt
Sesleri sürekli tekrarla
User prompt
Herbir gear çeşidi için kendi sesi çalsin ve loop şeklinde calsin
User prompt
Please fix the bug: 'Uncaught ReferenceError: gearAssetIdx is not defined' in or related to this line: 'var soundName = 'gearRotate' + gearAssetIdx;' Line Number: 143
User prompt
5 tane gear icin 5 ses olsun.
User prompt
Tum ses calma loguc sil
User prompt
Gear spawn oldugunda ses calmaya basla
User prompt
Ses gear varken calsin yokken degil
User prompt
Gear oluştugu anda sesi çalmaya basla gear silindiginde sesi durdur
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
/****
* Classes
****/
// Gear class: represents a single gear that rotates in a given direction and speed
var Gear = Container.expand(function () {
var self = Container.call(this);
// Randomly select one of 5 gear assets
var gearAssetIdx = Math.floor(Math.random() * 5) + 1;
var gear = self.attachAsset('gear' + gearAssetIdx, {
anchorX: 0.5,
anchorY: 0.5
});
// Assign unique sound for this gear type
// Ensure gear5 uses the correct unique sound asset
if (gearAssetIdx === 5) {
self._sound = LK.getSound('gearRotate5');
self._soundName = 'gearRotate5';
} else {
self._sound = LK.getSound('gearRotate' + gearAssetIdx);
self._soundName = 'gearRotate' + gearAssetIdx;
}
self._gearAssetIdx = gearAssetIdx;
// Set up default size for asset (will be overridden externally)
gear.width = 270 * 2;
gear.height = 270 * 2;
// Rotation speed in radians per frame (set externally)
self.rotationSpeed = 0;
// Removed all gear sound logic
// Update method: rotates the gear
self.update = function () {
// Track last rotation for step detection
if (typeof self._lastRotation === "undefined") {
self._lastRotation = self.rotation;
}
self.rotation += self.rotationSpeed;
// Play unique sound for this gear type on each full step (e.g. every 1/12 turn)
var step = Math.PI / 6; // 30 degrees per step
var lastStep = Math.floor(self._lastRotation / step);
var currentStep = Math.floor(self.rotation / step);
if (self.rotationSpeed !== 0 && self._sound && lastStep !== currentStep) {
// Only play sound if at least one gear of this type is present on screen
var found = false;
for (var i = 0; i < gears.length; i++) {
if (gears[i] && gears[i]._gearAssetIdx === self._gearAssetIdx) {
found = true;
break;
}
}
if (found) {
self._sound.play();
}
// Score logic: +1 for right (positive speed), -1 for left (negative speed)
if (typeof score !== "undefined" && typeof scoreTxt !== "undefined") {
if (self.rotationSpeed > 0) {
score += 1;
} else if (self.rotationSpeed < 0) {
score -= 1;
}
scoreTxt.setText(formatScore(score));
}
}
self._lastRotation = self.rotation;
};
// Handle down event for single tap: remove gear and stop sound
self.down = function (x, y, obj) {
// Stop the unique sound for this gear if playing
if (self._sound && typeof self._sound.stop === "function") {
self._sound.stop();
self._soundPlaying = false;
}
// Remove from game and gears array
if (self.parent) {
self.parent.removeChild(self);
}
for (var i = 0; i < gears.length; i++) {
if (gears[i] === self) {
gears.splice(i, 1);
break;
}
}
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0xffffff // White background for clarity
});
/****
* Game Code
****/
// We need tween for smooth rotation animations
// List of all gears in the game
var gears = [];
// Score variable and score text
var score = 0;
function formatScore(val) {
var s = Math.abs(val).toString().padStart(6, "0");
return (val < 0 ? "-" : "") + s;
}
var scoreTxt = new Text2(formatScore(score), {
size: 120,
fill: 0x222222
});
scoreTxt.anchor.set(1, 0); // right-top
LK.gui.top.addChild(scoreTxt);
scoreTxt.x = LK.gui.top.width - 40;
scoreTxt.y = 10;
// For drag direction detection
var isDragging = false;
var dragStart = null; // {x, y}
var dragCurrent = null; // {x, y}
// Helper: calculate angle between two points (in radians)
function getAngle(x1, y1, x2, y2) {
return Math.atan2(y2 - y1, x2 - x1);
}
// Helper: clamp rotation speed
function clamp(val, min, max) {
if (val < min) {
return min;
}
if (val > max) {
return max;
}
return val;
}
// Main game event handlers
// On press down: create a gear at tap position (short tap)
game.down = function (x, y, obj) {
// Create and position the gear
var gear = new Gear();
// Set default rotation speed and direction
var speed = 0.03;
// Randomize direction
if (Math.random() < 0.5) {
speed = -speed;
}
gear.rotationSpeed = speed;
// Set default gear size
var minGear = 120 * 2,
maxGear = 390 * 2;
var gearSize = minGear + Math.random() * (maxGear - minGear);
// Prevent overlapping: check if new gear would overlap any existing gear
gear.x = x;
gear.y = y;
var overlap = false;
for (var i = 0; i < gears.length; i++) {
var other = gears[i];
var dxg = gear.x - other.x;
var dyg = gear.y - other.y;
var distg = Math.sqrt(dxg * dxg + dyg * dyg);
var otherGear = other.children[0].width; // Only gear asset
if (distg < (gearSize + otherGear) / 2 + 10) {
// 10px buffer
overlap = true;
break;
}
}
if (overlap) {
return;
}
// Set gear size (only gear asset)
gear.children[0].width = gearSize;
gear.children[0].height = gearSize;
// Add to game and to gears array
game.addChild(gear);
gears.push(gear);
// Sound assignment now handled in Gear constructor
};
// On move: update drag current position
game.move = function (x, y, obj) {
if (isDragging) {
dragCurrent.x = x;
dragCurrent.y = y;
}
};
// On release: create a new gear at dragStart, rotating in the direction of drag
game.up = function (x, y, obj) {
// No-op: gear creation is now handled in down event
};
// Update loop: update all gears
game.update = function () {
for (var i = 0; i < gears.length; i++) {
if (gears[i].update) {
gears[i].update();
}
}
}; ===================================================================
--- original.js
+++ change.js
@@ -53,8 +53,17 @@
}
if (found) {
self._sound.play();
}
+ // Score logic: +1 for right (positive speed), -1 for left (negative speed)
+ if (typeof score !== "undefined" && typeof scoreTxt !== "undefined") {
+ if (self.rotationSpeed > 0) {
+ score += 1;
+ } else if (self.rotationSpeed < 0) {
+ score -= 1;
+ }
+ scoreTxt.setText(formatScore(score));
+ }
}
self._lastRotation = self.rotation;
};
// Handle down event for single tap: remove gear and stop sound
@@ -90,8 +99,22 @@
****/
// We need tween for smooth rotation animations
// List of all gears in the game
var gears = [];
+// Score variable and score text
+var score = 0;
+function formatScore(val) {
+ var s = Math.abs(val).toString().padStart(6, "0");
+ return (val < 0 ? "-" : "") + s;
+}
+var scoreTxt = new Text2(formatScore(score), {
+ size: 120,
+ fill: 0x222222
+});
+scoreTxt.anchor.set(1, 0); // right-top
+LK.gui.top.addChild(scoreTxt);
+scoreTxt.x = LK.gui.top.width - 40;
+scoreTxt.y = 10;
// For drag direction detection
var isDragging = false;
var dragStart = null; // {x, y}
var dragCurrent = null; // {x, y}
red gear top view tranparent. In-Game asset. 2d. High contrast. No shadows
yellow gear top view tranparent. In-Game asset. 2d. High contrast. No shadows
Green gear top view tranparent. In-Game asset. 2d. High contrast. No shadows
Mavi renk deniz manzarası. In-Game asset. 2d. High contrast. No shadows
Just a finger top view. In-Game asset. 2d. High contrast. No shadows