User prompt
Skor teker teker artsin yada azalsin ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
Please fix the bug: 'TypeError: tween.to is not a function' in or related to this line: 'scoreTween = tween.to({' Line Number: 173 ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
Please fix the bug: 'TypeError: tween.add is not a function' in or related to this line: 'scoreTween = tween.add({' Line Number: 173
User prompt
Please fix the bug: 'TypeError: tween.to is not a function' in or related to this line: 'scoreTween = tween.to({' Line Number: 173
User prompt
Please fix the bug: 'TypeError: tween.add is not a function' in or related to this line: 'scoreTween = tween.add({' Line Number: 173
User prompt
Please fix the bug: 'TypeError: tween.create is not a function' in or related to this line: 'scoreTween = tween.create({' Line Number: 173
User prompt
Skor tek tek ve daha doğal değişsin
User prompt
Drag drop yaparkrn önizledigim gear çeşidi oluşsun.
User prompt
2 kat daha küçük gear olusturmaya izin ver
User prompt
2 kat daha büyük gear oluşturmaya izin ver.
User prompt
Skor tablosu ekle sağa her tur dönüş icin 1 puan arttir
User prompt
Daha büyuk be daha kücük gear olusturabileyim.
User prompt
Her turda 1 puan ver. Sola ise 1 puan azalt sağa ise 1 puan arttir.
User prompt
Skor mantığını temizle tur sayısina ve yonune gore ver.
User prompt
Dokunup bıraktığında olustur geari. Uzun dokunma büyüklük kaydirma yön belirtsin. Tek dokunma mevcutsa silsin.
User prompt
Dokunmayla yarat geari
User prompt
Gear spawn dokunmaya göre olsun. Uzun dokunma daha büyuk kısa dokunma daha kücük gear yapsin
User prompt
Bunu uygula
User prompt
Büyuk ve küçük gear icin tur tamamlama farklı oldugunda bunu skor artışına yansit. Gear tam tur bitirmeden skor değiştirme
User prompt
Biraz sağa al
User prompt
Biraz daha sola ve az küçült
User prompt
Skoru daha büyuk ve beyaz renk yap biraz sola kaydır
User prompt
Skoru kalın font beyaz renk yap.
User prompt
Skoru biraz sola al ve rengini kalın beyaz yap.
User prompt
Skoru üst ortaya al ve rengini kalın beyaz yap.
/****
* 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: Only update score when a full rotation is completed, +1 per full turn
if (typeof score !== "undefined" && typeof scoreTxt !== "undefined") {
// Track completed full turns
if (typeof self._lastFullTurns === "undefined") {
self._lastFullTurns = Math.floor(self._lastRotation / (2 * Math.PI));
}
var currentFullTurns = Math.floor(self.rotation / (2 * Math.PI));
if (currentFullTurns !== self._lastFullTurns) {
// Only update score when a full rotation is completed
if (self.rotationSpeed !== 0) {
score += 1;
scoreTxt.setText(score.toString());
}
self._lastFullTurns = currentFullTurns;
}
}
}
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
// Add background image (covers the whole game area)
var bg = LK.getAsset('background', {
anchorX: 0,
anchorY: 0,
x: 0,
y: 0,
width: 2048,
height: 2732
});
game.addChild(bg);
// List of all gears in the game
var gears = [];
// Score variable and score text
var score = 0;
var scoreTxt = new Text2(score.toString(), {
size: 170,
fill: 0xFFFFFF
});
scoreTxt.anchor.set(1, 0); // right-top
LK.gui.top.addChild(scoreTxt);
// Move slightly to the right
scoreTxt.x = LK.gui.top.width - 240;
scoreTxt.y = 10;
// For drag/hold/tap detection
var dragStart = null; // {x, y, t}
var dragCurrent = null; // {x, y}
var dragTimer = null;
var dragHold = false;
var dragGearPreview = null;
var dragDirection = 1; // 1: CW, -1: CCW
var dragSize = 240; // default
var tapThreshold = 200; // ms
var holdThreshold = 220; // ms
var minGear = 120 * 2,
maxGear = 390 * 2;
// 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;
}
// Helper: find gear at (x, y)
function findGearAt(x, y) {
for (var i = 0; i < gears.length; i++) {
var g = gears[i];
var dx = g.x - x;
var dy = g.y - y;
var r = g.children[0].width / 2;
if (dx * dx + dy * dy <= r * r) return g;
}
return null;
}
// On press down: start drag/tap/hold detection
game.down = function (x, y, obj) {
dragStart = {
x: x,
y: y,
t: Date.now()
};
dragCurrent = {
x: x,
y: y
};
dragHold = false;
dragDirection = 1;
// Default size is mid-way between min and max
dragSize = (minGear + maxGear) / 2;
// If tap on existing gear, mark for possible removal
var gear = findGearAt(x, y);
if (gear) {
dragGearPreview = gear;
return;
}
// Start hold timer for gear creation
dragTimer = LK.setTimeout(function () {
dragHold = true;
// Show preview gear
dragGearPreview = new Gear();
dragGearPreview.x = dragStart.x;
dragGearPreview.y = dragStart.y;
dragGearPreview.rotationSpeed = 0;
dragGearPreview.children[0].width = dragSize;
dragGearPreview.children[0].height = dragSize;
dragGearPreview.alpha = 0.5;
game.addChild(dragGearPreview);
}, holdThreshold);
};
// On move: update drag current position, update preview gear size/direction
game.move = function (x, y, obj) {
if (!dragStart) return;
dragCurrent.x = x;
dragCurrent.y = y;
if (dragHold && dragGearPreview) {
// Calculate drag vector
var dx = dragCurrent.x - dragStart.x;
var dy = dragCurrent.y - dragStart.y;
var dist = Math.sqrt(dx * dx + dy * dy);
// Size: proportional to drag distance, clamp to min/max
// Map drag distance from 0..(max possible) to minGear..maxGear
// Let's use up to 600px drag for full range
var maxDragDist = 600;
var size = clamp(minGear + (maxGear - minGear) * Math.min(dist, maxDragDist) / maxDragDist, minGear, maxGear);
dragSize = size;
dragGearPreview.children[0].width = size;
dragGearPreview.children[0].height = size;
// Direction: right is CW, left is CCW
dragDirection = dx >= 0 ? 1 : -1;
dragGearPreview.scale.x = dragDirection;
}
};
// On release: decide tap/hold/drag action
game.up = function (x, y, obj) {
if (dragTimer) {
LK.clearTimeout(dragTimer);
dragTimer = null;
}
var now = Date.now();
var dt = now - (dragStart ? dragStart.t : now);
// Tap on existing gear: remove it
if (dragGearPreview && gears.indexOf(dragGearPreview) !== -1) {
// Remove gear
if (dragGearPreview.parent) dragGearPreview.parent.removeChild(dragGearPreview);
var idx = gears.indexOf(dragGearPreview);
if (idx !== -1) gears.splice(idx, 1);
dragGearPreview = null;
dragStart = null;
return;
}
// Short tap: do nothing (no gear created)
if (!dragHold && dt < tapThreshold) {
dragStart = null;
dragGearPreview = null;
return;
}
// Hold/drag: create gear at dragStart, with size/direction
if (dragHold && dragGearPreview) {
// Remove preview
if (dragGearPreview.parent) dragGearPreview.parent.removeChild(dragGearPreview);
dragGearPreview = null;
// Prevent overlapping: check if new gear would overlap any existing gear
var overlap = false;
for (var i = 0; i < gears.length; i++) {
var other = gears[i];
var dxg = dragStart.x - other.x;
var dyg = dragStart.y - other.y;
var distg = Math.sqrt(dxg * dxg + dyg * dyg);
var otherGear = other.children[0].width;
if (distg < (dragSize + otherGear) / 2 + 10) {
overlap = true;
break;
}
}
if (!overlap) {
var gear = new Gear();
gear.x = dragStart.x;
gear.y = dragStart.y;
gear.rotationSpeed = 0.03 * dragDirection;
gear.children[0].width = dragSize;
gear.children[0].height = dragSize;
game.addChild(gear);
gears.push(gear);
}
}
dragStart = null;
dragGearPreview = null;
};
// 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,32 +53,21 @@
}
if (found) {
self._sound.play();
}
- // Score logic: Only update score when a full rotation is completed, and scale by gear size
+ // Score logic: Only update score when a full rotation is completed, +1 per full turn
if (typeof score !== "undefined" && typeof scoreTxt !== "undefined") {
// Track completed full turns
if (typeof self._lastFullTurns === "undefined") {
self._lastFullTurns = Math.floor(self._lastRotation / (2 * Math.PI));
}
var currentFullTurns = Math.floor(self.rotation / (2 * Math.PI));
if (currentFullTurns !== self._lastFullTurns) {
- // Determine score delta based on direction and gear size
- var gearDiameter = self.children[0].width; // asset width
- // Use a base value for the smallest gear, scale up for larger gears
- var minGear = 120 * 2,
- maxGear = 390 * 2;
- var baseScore = 1;
- var sizeFactor = (gearDiameter - minGear) / (maxGear - minGear);
- // Score: small gear = 1, big gear = 2 (rounded)
- var scoreDelta = baseScore + Math.round(sizeFactor);
// Only update score when a full rotation is completed
- if (self.rotationSpeed > 0) {
- score += scoreDelta;
- } else if (self.rotationSpeed < 0) {
- score -= scoreDelta;
+ if (self.rotationSpeed !== 0) {
+ score += 1;
+ scoreTxt.setText(score.toString());
}
- scoreTxt.setText(formatScore(score));
self._lastFullTurns = currentFullTurns;
}
}
}
@@ -129,13 +118,9 @@
// 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), {
+var scoreTxt = new Text2(score.toString(), {
size: 170,
fill: 0xFFFFFF
});
scoreTxt.anchor.set(1, 0); // right-top
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