/****
* Classes
****/
/****
* Character: Dokunulduğunda zıplar.
****/
var Character = Container.expand(function () {
var self = Container.call(this);
self.attachAsset('character', {
anchorX: 0.5,
anchorY: 0.5
});
self.zIndex = 4;
self.velocityY = 0;
self.gravity = 0.3;
self.jumpStrength = -12.1;
self.width = 350;
self.height = 300;
self.update = function () {
if (gameStarted && !gameOver) {
self.velocityY += self.gravity;
self.y += self.velocityY;
if (self.y > groundY - 100) {
self.y = groundY - 100;
self.velocityY = 0;
if (!self.intersects(underscoreAsset) && !self.preventDeath) {
gameOver = true;
endGame();
}
}
var characterLeft = self.x - self.width / 2;
var characterRight = self.x + self.width / 2;
var characterTop = self.y - self.height / 2;
var characterBottom = self.y + self.height / 2;
if (characterLeft + self.width / 2 < 0 || characterRight - self.width / 2 > screenRight || characterTop + self.height / 2 < 0 || characterBottom - self.height / 2 > groundY) {
gameOver = true;
endGame();
}
game.children.forEach(function (child) {
if (child instanceof Tube) {
var tubeLeft = child.x - child.bottomTube.width / 2;
var tubeRight = child.x + child.bottomTube.width / 2;
var safeGapLowerEdge = child.y - child.bottomTube.height;
var safeGapUpperEdge = -gapOffset + child.topTube.height;
if (self.x + self.width / 2 > tubeLeft && self.x - self.width / 2 < tubeRight) {
if (self.y < safeGapUpperEdge || self.y > safeGapLowerEdge) {
if (!self.intersects(underscoreAsset) && !self.preventDeath) {
gameOver = true;
endGame();
}
}
}
} else if (child instanceof Tree) {
var treeLeft = child.x - child.bottomTree.width / 2;
var treeRight = child.x + child.bottomTree.width / 2;
var safeGapLowerEdge = child.y - child.bottomTree.height;
var safeGapUpperEdge = -gapOffset + child.topTree.height;
if (self.x + self.width / 2 > treeLeft && self.x - self.width / 2 < treeRight) {
if (self.y < safeGapUpperEdge || self.y > safeGapLowerEdge) {
if (!self.intersects(underscoreAsset) && !self.preventTreeDeath) {
gameOver = true;
endGame();
}
}
}
}
});
}
};
self.jump = function () {
if (!gameOver && gameStarted) {
self.velocityY = self.jumpStrength;
LK.getSound('wingeffect').play();
// Karakter zıpladığında background ve bg2'ye de jump etkisi uyguluyoruz:
background.velocityY = background.jumpStrength;
bg2.velocityY = bg2.jumpStrength;
background3DContainer.velocityY = background3DContainer.jumpStrength;
bgEffect3DContainer.velocityY = bgEffect3DContainer.jumpStrength;
}
};
return self;
});
/****
* GameOverText class
****/
var GameOverText = Container.expand(function () {
var self = Container.call(this);
self.text = new Text2("GAME OVER", {
fontFamily: "Arial",
fontSize: 2250,
fill: 0xFF0000,
align: "center",
fontWeight: "bold"
});
self.text.anchorX = 0.5;
self.text.anchorY = 0.5;
self.addChild(self.text);
self.zIndex = 100;
return self;
});
/****
* Tree class: Üst ve alt ağaç oluşturma
****/
var Tree = Container.expand(function () {
var self = Container.call(this);
var bottomUnit = Math.floor(Math.random() * 8) + 1;
var topUnit = 9 - bottomUnit;
var unitSize = groundY / totalUnits;
var bottomHeight = bottomUnit * unitSize;
var topHeight = topUnit * unitSize;
self.y = groundY;
self.bottomTree = self.attachAsset('tree', {
anchorX: 0.5,
anchorY: 1,
width: 300,
height: bottomHeight,
flipY: false
});
self.topTree = self.attachAsset('tree', {
anchorX: 0.5,
anchorY: 0.5,
width: 300,
height: topHeight,
flipY: false
});
self.topTree.rotation = Math.PI;
self.topTree.y = -groundY - gapOffset + topHeight / 2;
self.zIndex = 1;
self.x = 2048 + 800;
self.velocityX = -3.6;
self.spawned = false;
self.prevX = self.x;
self.update = function () {
if (gameStarted && !gameOver) {
self.x += self.velocityX;
if (!self.spawned && self.prevX > objectSpawnThreshold && self.x <= objectSpawnThreshold) {
self.spawned = true;
var newTube = new Tube();
newTube.x = 2048 + 640;
game.addChild(newTube);
lastSpawner = newTube;
}
self.prevX = self.x;
if (!self.passed && character.x > self.x + self.bottomTree.width / 2) {
self.passed = true;
updateScore();
}
}
};
return self;
});
/****
* Tube class: Üst ve alt boru oluşturma
****/
var Tube = Container.expand(function () {
var self = Container.call(this);
var bottomUnit = Math.floor(Math.random() * 8) + 1;
var topUnit = 9 - bottomUnit;
var unitSize = groundY / totalUnits;
var bottomHeight = bottomUnit * unitSize;
var topHeight = topUnit * unitSize;
self.y = groundY;
self.bottomTube = self.attachAsset('tube', {
anchorX: 0.5,
anchorY: 1,
width: 285,
//{1C} // 5% thinner
height: bottomHeight,
flipY: false
});
self.topTube = self.attachAsset('tube', {
anchorX: 0.5,
anchorY: 0.5,
width: 285,
//{1I} // 5% thinner
height: topHeight,
flipY: false
});
self.topTube.rotation = Math.PI;
self.topTube.y = -groundY - gapOffset + topHeight / 2;
self.zIndex = 1;
self.x = 2048 + 800;
self.velocityX = -3.6;
self.spawned = false;
self.prevX = self.x;
self.update = function () {
if (gameStarted && !gameOver) {
self.x += self.velocityX;
if (self.velocityX === 0) {
background.velocityX = 0;
bg2.velocityX = 0;
}
if (!self.spawned && self.prevX > objectSpawnThreshold && self.x <= objectSpawnThreshold) {
self.spawned = true;
var newTree = new Tree();
newTree.x = 2048 + 640;
game.addChild(newTree);
lastSpawner = newTree;
}
self.prevX = self.x;
if (!self.passed && character.x > self.x + self.bottomTube.width / 2) {
self.passed = true;
updateScore();
}
}
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x000000
});
/****
* Game Code
****/
/****
* Global Variables & Helper Functions
****/
var groundY = 2732;
var menuOpen = true;
var volumeOn = true;
var records = [];
var gapOffset = 400;
var gameStarted = false;
var gameOver = false;
var gameWait = false;
var screenRight = 2048;
var totalUnits = 10;
var tubeSpawnThreshold, treeSpawnThreshold;
var lastSpawner = null;
var gameOverText = null;
var passCounter = 0;
var lastScore = 0;
var backgroundScrollSpeed = 7.2;
var containerScrollSpeed = 5; // Tanımlandı
var underscoreTouchCount = 0;
var flipped = false;
function centerX() {
return 2048 / 2;
}
function centerY() {
return groundY / 2;
}
var objectSpawnThreshold = centerX() + (screenRight - centerX()) / 2;
// Örnek container oluşturuluyor
var myContainer = new Container();
myContainer.x = centerX(); // Ekranın yatay ortasında
myContainer.y = 1900; // Başlangıçta y = 2000 (örneğin en üst sınır)
// Sabit yukarı doğru hareket hızı (update fonksiyonunda uygulanacak)
var containerUpwardSpeed = -0.5;
// Her tıklamada ek olarak uygulanacak aşağı doğru kayma miktarı
var extraDownDelta = 50;
// Container'ın update fonksiyonu: her frame sabit hızda aşağıya doğru hareket eder
myContainer.update = function () {
// Oyun başlamışsa yukarı doğru hareket et
if (gameStarted) {
this.y += containerUpwardSpeed;
// Minimum y sınırını 100 olarak ayarlıyoruz
if (this.y < 100) {
this.y = 100;
}
}
};
// Container'a tıklama (touch/down) olayı ekliyoruz
myContainer.on('down', function () {
// Tıklamada ekstra aşağı kayma ekliyoruz
this.y += extraDownDelta;
if (this.y > 2600) {
this.y = 2600;
}
});
// Oluşturulan container'ı oyuna ekleyelim
game.addChild(myContainer);
var menuContainer = new Container();
menuContainer.zIndex = 200;
var menuBackground = LK.getAsset('menu_background', {
anchorX: 0.5,
anchorY: 0.5,
x: centerX(),
y: centerY() + 625
});
menuBackground.zIndex = 1000;
menuContainer.addChild(menuBackground);
var menuBackgroundPart = LK.getAsset('menu_background_part', {
anchorX: 0.5,
anchorY: 0.19,
x: centerX() - 1030,
y: centerY() - 2866
});
menuBackgroundPart.zIndex = menuBackground.zIndex + 1;
menuBackground.addChild(menuBackgroundPart);
var playButton = LK.getAsset('button_play', {
anchorX: 0.5,
anchorY: 0.5,
x: centerX() - 20,
y: centerY() + 205,
width: 880 * 1.5,
height: 230 * 1.5
});
playButton.visible = false;
menuContainer.addChild(playButton);
var playLabel = new Text2("PLAY", {
fontFamily: "Arial",
fontSize: 630.25 * 1.1 * 1.08 * 1.5 * 1.2,
fill: 0xffffff
});
playLabel.anchorX = 0.5;
playLabel.anchorY = 0.5;
playLabel.x = playButton.x - 45;
playLabel.y = playButton.y - -25;
playLabel.visible = true;
playLabel.zIndex = 1000;
menuContainer.addChild(playLabel);
var volumeButton = LK.getAsset('button_volume', {
anchorX: 0.5,
anchorY: 0.5,
x: centerX() - 28,
y: centerY() + 320,
width: 880 * 1.5,
height: 230 * 1.5
});
volumeButton.visible = false;
menuContainer.addChild(volumeButton);
var volumeLabel = new Text2("VOLUME", {
fontFamily: "Arial",
fontSize: 63.25 * 1.1 * 1.05 * 1.05 * 1.05 * 1.5 * 1.2,
fill: 0xffffff
});
volumeLabel.anchorX = 0.5;
volumeLabel.anchorY = 0.5;
volumeLabel.x = volumeButton.x - 58;
volumeLabel.y = volumeButton.y + 30;
volumeLabel.visible = true;
volumeLabel.zIndex = 1000;
menuContainer.addChild(volumeLabel);
var creditsButton = LK.getAsset('button_credits', {
anchorX: 0.5,
anchorY: 0.5,
x: centerX() - 30,
y: centerY() + 429,
width: 880 * 1.5,
height: 230 * 1.5
});
creditsButton.visible = false;
menuContainer.addChild(creditsButton);
var creditsLabel = new Text2("CREDITS", {
fontFamily: "Arial",
fontSize: 630.25 * 1.05 * 1.05 * 1.05 * 1.5 * 1.2,
fill: 0xffffff
});
creditsLabel.anchorX = 0.5;
creditsLabel.anchorY = 0.5;
creditsLabel.x = creditsButton.x - 60;
creditsLabel.y = creditsButton.y + 28;
creditsLabel.visible = true;
creditsLabel.zIndex = 1000;
menuContainer.addChild(creditsLabel);
var recordsButton = LK.getAsset('button_records', {
anchorX: 0.5,
anchorY: 0.5,
x: centerX() - 30,
y: centerY() + 540,
width: 880 * 1.5,
height: 230 * 1.5
});
recordsButton.visible = false;
menuContainer.addChild(recordsButton);
var recordsLabel = new Text2("RECORDS", {
fontFamily: "Arial",
fontSize: 150.25 * 1.05 * 1.05 * 1.03 * 1.05 * 1.5 * 1.2,
fill: 0xffffff
});
recordsLabel.anchorX = 0.5;
recordsLabel.anchorY = 0.5;
recordsLabel.x = recordsButton.x - 67;
recordsLabel.y = recordsButton.y + 28;
recordsLabel.visible = true;
recordsLabel.zIndex = 1000;
menuContainer.addChild(recordsLabel);
var counterText = new Text2('0', {
size: 124.2,
fill: 0xFFFFFF
});
counterText.anchor.set(0, 0);
counterText.x = 1315;
counterText.y = 15;
LK.gui.topLeft.addChild(counterText);
var background = LK.getAsset('background', {
anchorX: 0.5,
anchorY: 0.5,
x: centerX(),
y: groundY / 2
});
background.zIndex = 0;
background.velocityY = 0;
background.gravity = 0.033; // 0'a çok yakın bir değer
background.jumpStrength = 0.66; // 0'dan daha uzak ama azıcık
game.addChild(background);
var bg2 = LK.getAsset('bg2', {
anchorX: 0.5,
anchorY: 0.5,
x: centerX() + 2807.2,
y: groundY / 2
});
bg2.zIndex = 0;
bg2.velocityY = 0;
bg2.gravity = 0.033;
bg2.jumpStrength = 0.66;
game.addChild(bg2);
var sky = LK.getAsset('sky', {
anchorX: 0.5,
anchorY: 0,
x: centerX(),
y: 0
});
sky.zIndex = 2;
game.addChild(sky);
var groundAsset = LK.getAsset('ground', {
anchorX: 0.5,
anchorY: 0.4,
x: centerX(),
y: groundY - -25
});
groundAsset.zIndex = 4.1;
game.addChild(groundAsset);
var ground2Asset = LK.getAsset('ground2', {
anchorX: 0.5,
anchorY: 0.05,
x: centerX(),
y: groundY - 40
});
ground2Asset.zIndex = 0.5;
game.addChild(ground2Asset);
function updateScore() {
passCounter++;
counterText.setText(passCounter);
if (passCounter > 9) {
counterText.x = 1315 - 25; // Move 25 pixels to the left
} else {
counterText.x = 1315; // Reset to original position
}
}
// Karakter bağlı 3D arka plan ve efekt – başlangıçta container y = 2400 (en alt sınır)
var background3D = LK.getAsset('3dlikebackground', {
anchorX: 0.5,
anchorY: 0.5
});
var background3DContainer = new Container();
background3DContainer.offsetY = 0;
background3DContainer.velocityY = 0;
background3DContainer.gravity = 0.3 * 0.178; //0.6 Ay atmosferi benzeri yer çekimi
background3DContainer.jumpStrength = 2.15; // Daha hafif yer çekimi için zıplama kuvveti
background3DContainer.isInverted = false;
background3DContainer.addChild(background3D);
background3DContainer.x = centerX();
// Başlangıçta container'lar en altta (2400)
background3DContainer.y = 2350;
// Container update: oyun başladığında gravity uygulanır, ve y değeri 2000 ile 2400 arasında clamp edilir.
background3DContainer.update = function () {
if (!gameStarted) {
return;
}
this.velocityY -= this.gravity;
this.y += this.velocityY;
this.y = Math.max(1900, Math.min(this.y, 2900));
};
game.addChild(background3DContainer);
var bgEffect3D = LK.getAsset('3dbgeffect', {
anchorX: 0.5,
anchorY: 0.5
});
var bgEffect3DContainer = new Container();
bgEffect3DContainer.offsetY = 0;
bgEffect3DContainer.velocityY = 0;
bgEffect3DContainer.gravity = 0.3 * 0.178; //0.6 Ay atmosferi benzeri yer çekimi
bgEffect3DContainer.jumpStrength = 2.15; // Daha hafif yer çekimi için zıplama kuvveti
bgEffect3DContainer.isInverted = false;
bgEffect3DContainer.addChild(bgEffect3D);
bgEffect3DContainer.x = background3DContainer.x + 2807;
bgEffect3DContainer.y = 2350;
bgEffect3DContainer.update = function () {
if (!gameStarted) {
return;
}
this.velocityY -= this.gravity;
this.y += this.velocityY;
this.y = Math.max(1900, Math.min(this.y, 2900));
};
game.addChild(bgEffect3DContainer);
var underscoreAsset = LK.getAsset('_', {
anchorX: 0.5,
anchorY: 0.5,
x: centerX() + 1000,
y: centerY() - 1500 // Moved 500 pixels up
});
underscoreAsset.zIndex = 15000;
game.addChild(underscoreAsset);
underscoreAsset.on('down', function () {
underscoreTouchCount++;
if (underscoreTouchCount >= 5) {
character.preventDeath = true;
character.preventTreeDeath = true;
}
});
game.children.sort(function (a, b) {
return (a.zIndex || 0) - (b.zIndex || 0);
});
// Create and add the character
var character = game.addChild(new Character());
character.x = centerX();
character.y = centerY();
// Menü konumunu ayarla
menuContainer.y += 100;
game.addChild(menuContainer);
/****
* Helper Functions: Credits, Volume & Records
****/
function createCommonCloseElements(modalWidth, modalHeight) {
var closeLabel = LK.getAsset('justX', {
anchorX: 0.5,
anchorY: 0.5,
zIndex: 100000,
x: -9,
y: 6
});
var radius = 50;
var closeButton = LK.getAsset('button_close', {
anchorX: 0.5,
anchorY: 0.5,
width: radius * 2.3 * 1.2,
height: radius * 2.3 * 1.2
});
closeButton.zIndex = 10000;
closeButton.x = 0;
closeButton.y = 0;
closeButton.addChild(closeLabel);
return closeButton;
}
function showCredits() {
menuOpen = false;
var creditsContainer = new Container();
creditsContainer.zIndex = 300;
var modalWidth = 1500,
modalHeight = 2200;
var bg = LK.getAsset('second_menu', {
anchorX: 0.5,
anchorY: 0.5,
width: modalWidth,
height: modalHeight,
color: 0x000000
});
bg.x = centerX();
bg.y = centerY();
creditsContainer.addChild(bg);
var creditsText = new Text2("Game by\nYiğit Özgözükara", {
fontFamily: "Arial",
fontSize: 5000 * 1.03,
fill: 0xffffff,
align: "center"
});
creditsText.anchorX = 0.5;
creditsText.anchorY = 0.5;
creditsText.x = centerX() - 359;
creditsText.y = centerY() - 800 + 40;
creditsText.scale.set(3, 3);
creditsContainer.addChild(creditsText);
game.addChild(creditsContainer);
var closeButton = createCommonCloseElements(modalWidth, modalHeight);
closeButton.x = bg.x + modalWidth / 2 - closeButton.width / 2 - 185;
closeButton.y = bg.y - modalHeight / 2 + closeButton.height / 2 + 230;
creditsContainer.addChild(closeButton);
closeButton.on('down', function () {
game.removeChild(creditsContainer);
menuOpen = true;
menuContainer.visible = true;
});
}
function showVolume() {
menuOpen = false;
var volumeContainer = new Container();
volumeContainer.zIndex = 300;
var modalWidth = 1500,
modalHeight = 2200;
var bg = LK.getAsset('second_menu', {
anchorX: 0.5,
anchorY: 0.5,
width: modalWidth,
height: modalHeight,
color: 0x000000
});
bg.x = centerX();
bg.y = centerY();
volumeContainer.addChild(bg);
var currentMusicName = new Text2("Next Music", {
fontFamily: "Arial",
fontSize: 5000 * 1.103,
fill: 0xffffff,
align: "center"
});
currentMusicName.anchorX = 0.5;
currentMusicName.anchorY = 0.5;
currentMusicName.x = centerX() - 250;
currentMusicName.y = centerY() - 650 + 40 - 300 + 100;
currentMusicName.scale.set(3, 3);
volumeContainer.addChild(currentMusicName);
var musicButton = LK.getAsset('Musicbutton', {
anchorX: 0.5,
anchorY: 0.5,
x: centerX() - 280 + 250,
y: centerY() - 350 + 40 - 150
});
musicButton.on('down', function () {
playNextMusic();
});
volumeContainer.addChild(musicButton);
game.addChild(volumeContainer);
var closeButton = createCommonCloseElements(modalWidth, modalHeight);
closeButton.x = bg.x + modalWidth / 2 - closeButton.width / 2 - 185;
closeButton.y = bg.y - modalHeight / 2 + closeButton.height / 2 + 230;
volumeContainer.addChild(closeButton);
closeButton.on('down', function () {
game.removeChild(volumeContainer);
menuOpen = true;
menuContainer.visible = true;
});
}
function showRecords() {
menuOpen = false;
var recordsContainer = new Container();
recordsContainer.zIndex = 300;
var modalWidth = 1500,
modalHeight = 2200;
var bg = LK.getAsset('second_menu', {
anchorX: 0.5,
anchorY: 0.5,
width: modalWidth,
height: modalHeight,
color: 0x000000
});
bg.x = centerX();
bg.y = centerY();
recordsContainer.addChild(bg);
var recordsTextStr = "Top Scores:\n";
for (var i = 0; i < records.length; i++) {
recordsTextStr += i + 1 + ". " + records[i].score + " (Attempt " + records[i].attempt + ")\n";
}
if (records.length === 0) {
recordsTextStr += "No records yet.";
}
recordsTextStr += "\nAttempts: " + records.length;
recordsTextStr += "\nLast Score: " + lastScore;
var recordsText = new Text2(recordsTextStr, {
fontFamily: "Arial",
fontSize: 5000 * 1.103,
fill: 0xffffff,
align: "center"
});
recordsText.anchorX = 0.5;
recordsText.anchorY = 0.5;
recordsText.x = centerX() - 280;
recordsText.y = centerY() - 850 + 40;
recordsText.scale.set(3, 3);
recordsContainer.addChild(recordsText);
game.addChild(recordsContainer);
var closeButton = createCommonCloseElements(modalWidth, modalHeight);
closeButton.x = bg.x + modalWidth / 2 - closeButton.width / 2 - 185;
closeButton.y = bg.y - modalHeight / 2 + closeButton.height / 2 + 230;
recordsContainer.addChild(closeButton);
closeButton.on('down', function () {
game.removeChild(recordsContainer);
menuOpen = true;
menuContainer.visible = true;
});
}
/****
* End Game & Reset Functions
****/
function playNextMusic() {
musicCycle++;
if (musicCycle === 1) {
LK.stopMusic();
LK.playMusic(musicSequence[1]);
} else if (musicCycle === 2) {
LK.stopMusic();
LK.playMusic(musicSequence[2]);
} else if (musicCycle === 3) {
LK.stopMusic();
} else {
musicCycle = 0;
LK.stopMusic();
LK.playMusic(musicSequence[0]);
}
}
var musicSequence = ['m_1', 'M_2', 'M_3'];
var musicCycle = 0;
LK.playMusic(musicSequence[0]);
function endGame() {
LK.effects.flashScreen(0xFF0000, 500);
LK.getSound('deatheffect').play();
character.velocityY = character.jumpStrength;
character.update = function () {
if (gameOver) {
character.velocityY += character.gravity;
character.y += character.velocityY;
if (character.y > groundY + character.height) {
character.y = groundY + character.height;
character.velocityY = 0;
}
}
};
game.children.forEach(function (child) {
if (child.velocityX) {
child.velocityX = 0;
}
if (child === background || child === bg2) {
LK.setTimeout(function () {
child.velocityY = 0;
}, 300);
}
});
game.touchDisabled = true;
lastScore = passCounter;
records.push({
score: passCounter,
attempt: records.length + 1
});
records.sort(function (a, b) {
return b.score - a.score;
});
if (records.length > 5) {
records = records.slice(0, 5);
}
LK.setTimeout(function () {
game.touchDisabled = false;
menuOpen = true;
menuContainer.visible = true;
var startY = groundY + 100;
var endY = centerY() - 1270;
var animationDuration = 16.5 * 5 / 1.5;
var startTime = Date.now();
function animateMenu() {
var currentTime = Date.now();
var elapsedTime = currentTime - startTime;
var progress = Math.min(elapsedTime / animationDuration, 1);
menuContainer.y = startY + (endY - startY) * progress;
if (progress < 1) {
LK.setTimeout(animateMenu, 16);
}
}
animateMenu();
}, 1700);
LK.setTimeout(function () {
resetGame();
}, 1750);
}
function resetGame() {
if (gameOverText) {
game.removeChild(gameOverText);
gameOverText = null;
}
unflipWorld();
var objectsToRemove = [];
game.children.forEach(function (child) {
if (child instanceof Tree || child instanceof Tube) {
objectsToRemove.push(child);
}
});
objectsToRemove.forEach(function (obj) {
game.removeChild(obj);
});
game.removeChild(character);
character = game.addChild(new Character());
character.x = centerX();
character.y = centerY();
background.x = centerX();
background.y = groundY / 2;
bg2.x = centerX() + 2807.2;
bg2.y = groundY / 2;
background.velocityX = -3.6;
bg2.velocityX = -3.6;
bg2.scale.x = 1;
gameStarted = false;
gameOver = false;
character.preventDeath = false;
underscoreAsset.preventDeath = false;
lastSpawner = null;
passCounter = 0;
underscoreTouchCount = 0;
counterText.setText(passCounter);
// Reset container'ların konumunu ve velocity değerlerini
background3DContainer.y = 2350;
bgEffect3DContainer.y = 2350;
background3DContainer.velocityY = 0;
bgEffect3DContainer.velocityY = 0;
}
/****
* Eliptik hit testi için yardımcı fonksiyon
****/
function checkEllipseHover(button, lx, ly) {
var scaleFactorX = 1;
var scaleFactorY = 0.53;
var offsetY = 40;
var dx = lx - button.x;
var dy = ly - (button.y + offsetY);
var rx = button.width / 2 * scaleFactorX;
var ry = button.height / 2 * scaleFactorY;
return dx * dx / (rx * rx) + dy * dy / (ry * ry) <= 1;
}
/****
* Fare hareketinde hover kontrolü
****/
game.move = function (x, y, obj) {
if (!menuOpen) {
return;
}
var localX = x - menuContainer.x;
var localY = y - menuContainer.y;
playButton.visible = checkEllipseHover(playButton, localX, localY);
volumeButton.visible = checkEllipseHover(volumeButton, localX, localY);
creditsButton.visible = checkEllipseHover(creditsButton, localX, localY);
recordsButton.visible = checkEllipseHover(recordsButton, localX, localY);
};
/****
* Touch Event
****/
game.down = function (x, y, obj) {
if (menuOpen) {
var localX = x - menuContainer.x;
var localY = y - menuContainer.y;
if (checkEllipseHover(playButton, localX, localY)) {
var _animateMenu = function animateMenu() {
var currentTime = Date.now();
var elapsedTime = currentTime - startTime;
var progress = Math.min(elapsedTime / animationDuration, 1);
menuContainer.y = startY + (endY - startY) * progress;
if (progress < 1) {
LK.setTimeout(_animateMenu, 1);
} else {
menuOpen = false;
menuContainer.visible = false;
gameWait = true;
}
};
var animationDuration = 16.5 * 5 * 2 / 1.5;
var startTime = Date.now();
var startY = menuContainer.y;
var endY = centerY() + 100;
_animateMenu();
return;
} else if (checkEllipseHover(volumeButton, localX, localY)) {
showVolume();
} else if (checkEllipseHover(creditsButton, localX, localY)) {
showCredits();
} else if (checkEllipseHover(recordsButton, localX, localY)) {
showRecords();
}
return;
} else if (gameOver) {
if (!game.touchDisabled) {
menuOpen = true;
menuContainer.visible = true;
resetGame();
}
} else {
if (gameWait) {
gameWait = false;
gameStarted = true;
var initialTube = new Tube();
game.addChild(initialTube);
lastSpawner = initialTube;
character.jump();
} else {
character.jump();
character.rotation = 0.1;
LK.setTimeout(function () {
character.rotation = 0;
}, 200);
}
}
};
/****
* Game Loop
****/
game.update = function () {
game.children.forEach(function (child) {
if (child.update) {
child.update();
}
if (child === background || child === bg2) {
if (!gameOver && !menuOpen && gameStarted) {
child.x -= 3.0;
child.velocityY -= child.gravity;
child.y += child.velocityY;
}
if (child.x < -2807.2 / 2) {
child.x += 2807.2 * 2;
}
}
if (child === background3DContainer || child === bgEffect3DContainer) {
if (!gameOver && !menuOpen && gameStarted) {
child.x -= containerScrollSpeed * 1.2;
}
if (child.x < -2807.2 / 2) {
child.x += 2807.2 * 2;
}
}
});
game.children.sort(function (a, b) {
return (a.zIndex || 0) - (b.zIndex || 0);
});
};
function unflipWorld() {
if (!flipped) {
return;
}
flipped = false;
character.gravity = 0;
character.jumpStrength = 0;
zoomEffect();
LK.setTimeout(function () {
character.gravity = 0.3;
character.jumpStrength = -12;
}, 300);
background.scale.y *= -1;
bg2.scale.y *= -1;
sky.scale.y *= -1;
groundAsset.scale.y *= -1;
ground2Asset.scale.y *= -1;
}
function zoomEffect() {
var originalScale = character.scale.x;
character.scale.set(originalScale * 1.2);
LK.setTimeout(function () {
character.scale.set(originalScale);
}, 300);
}
function flipWorld() {
if (flipped) {
return;
}
flipped = true;
character.gravity = 0;
character.jumpStrength = 0;
zoomEffect();
LK.setTimeout(function () {
character.gravity = 0.3;
character.jumpStrength = -12;
}, 300);
background.scale.y *= -1;
bg2.scale.y *= -1;
sky.scale.y *= -1;
groundAsset.scale.y *= -1;
ground2Asset.scale.y *= -1;
} ===================================================================
--- original.js
+++ change.js
@@ -296,15 +296,17 @@
var playButton = LK.getAsset('button_play', {
anchorX: 0.5,
anchorY: 0.5,
x: centerX() - 20,
- y: centerY() + 205
+ y: centerY() + 205,
+ width: 880 * 1.5,
+ height: 230 * 1.5
});
playButton.visible = false;
menuContainer.addChild(playButton);
var playLabel = new Text2("PLAY", {
fontFamily: "Arial",
- fontSize: 630.25 * 1.1 * 1.08 * 1.5,
+ fontSize: 630.25 * 1.1 * 1.08 * 1.5 * 1.2,
fill: 0xffffff
});
playLabel.anchorX = 0.5;
playLabel.anchorY = 0.5;
@@ -316,15 +318,17 @@
var volumeButton = LK.getAsset('button_volume', {
anchorX: 0.5,
anchorY: 0.5,
x: centerX() - 28,
- y: centerY() + 320
+ y: centerY() + 320,
+ width: 880 * 1.5,
+ height: 230 * 1.5
});
volumeButton.visible = false;
menuContainer.addChild(volumeButton);
var volumeLabel = new Text2("VOLUME", {
fontFamily: "Arial",
- fontSize: 63.25 * 1.1 * 1.05 * 1.05 * 1.05 * 1.5,
+ fontSize: 63.25 * 1.1 * 1.05 * 1.05 * 1.05 * 1.5 * 1.2,
fill: 0xffffff
});
volumeLabel.anchorX = 0.5;
volumeLabel.anchorY = 0.5;
@@ -336,15 +340,17 @@
var creditsButton = LK.getAsset('button_credits', {
anchorX: 0.5,
anchorY: 0.5,
x: centerX() - 30,
- y: centerY() + 429
+ y: centerY() + 429,
+ width: 880 * 1.5,
+ height: 230 * 1.5
});
creditsButton.visible = false;
menuContainer.addChild(creditsButton);
var creditsLabel = new Text2("CREDITS", {
fontFamily: "Arial",
- fontSize: 630.25 * 1.05 * 1.05 * 1.05 * 1.5,
+ fontSize: 630.25 * 1.05 * 1.05 * 1.05 * 1.5 * 1.2,
fill: 0xffffff
});
creditsLabel.anchorX = 0.5;
creditsLabel.anchorY = 0.5;
@@ -356,15 +362,17 @@
var recordsButton = LK.getAsset('button_records', {
anchorX: 0.5,
anchorY: 0.5,
x: centerX() - 30,
- y: centerY() + 540
+ y: centerY() + 540,
+ width: 880 * 1.5,
+ height: 230 * 1.5
});
recordsButton.visible = false;
menuContainer.addChild(recordsButton);
var recordsLabel = new Text2("RECORDS", {
fontFamily: "Arial",
- fontSize: 150.25 * 1.05 * 1.05 * 1.03 * 1.05 * 1.5,
+ fontSize: 150.25 * 1.05 * 1.05 * 1.03 * 1.05 * 1.5 * 1.2,
fill: 0xffffff
});
recordsLabel.anchorX = 0.5;
recordsLabel.anchorY = 0.5;
green theme forest by green tones to the sky , not to much detail just simple tree shadows trees has no details just shadowed green and shadowless places, beautiful view. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows
Noivern. In-Game asset. 2d. High contrast. No shadows