Meta Description" name="description" />
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no">
<title>3D Sonic Phone Runner</title>
<style>
body { margin: 0; overflow: hidden; background: #87CEEB; touch-action: none; }
#ui { position: absolute; top: 10px; left: 10px; color: yellow; font-family: sans-serif; font-size: 24px; font-weight: bold; text-shadow: 2px 2px #000; }
.btn { position: absolute; bottom: 20px; width: 70px; height: 70px; background: rgba(255,255,255,0.5); border-radius: 50%; font-size: 30px; display: flex; align-items: center; justify-content: center; user-select: none; }
#left { left: 20px; }
#right { left: 100px; }
#jump { right: 20px; background: rgba(255,215,0,0.7); }
</style>
<script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/r128/three.min.js"></script>
</head>
<body>
<div id="ui">Halka: <span id="score">0</span></div>
<div id="left" class="btn">⬅️</div>
<div id="right" class="btn">➡️</div>
<div id="jump" class="btn">🦘</div>
<script>
const scene = new THREE.Scene();
scene.background = new THREE.Color(0x87CEEB);
const camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000);
const renderer = new THREE.WebGLRenderer();
renderer.setSize(window.innerWidth, window.innerHeight);
document.body.appendChild(renderer.domElement);
// Sonic (Mavi Top)
const playerGeo = new THREE.SphereGeometry(0.8, 32, 32);
const playerMat = new THREE.MeshBasicMaterial({ color: 0x0000FF });
const player = new THREE.Mesh(playerGeo, playerMat);
player.position.set(0, 0.8, 0);
scene.add(player);
// Pist (Zemin)
const trackGeo = new THREE.BoxGeometry(10, 0.1, 1000);
const trackMat = new THREE.MeshBasicMaterial({ color: 0x32CD32 });
const track = new THREE.Mesh(trackGeo, trackMat);
track.position.z = -500;
scene.add(track);
// Kamera Pozisyonu
camera.position.set(0, 3, 5);
let posX = 0;
let score = 0;
let speed = 0.5;
// Dokunmatik Kontroller
document.getElementById('left').ontouchstart = () => { if(posX > -3) posX -= 3; };
document.getElementById('right').ontouchstart = () => { if(posX < 3) posX += 3; };
function animate() {
requestAnimationFrame(animate);
// İlerleme ve Animasyon
player.position.z -= speed;
player.position.x += (posX - player.position.x) * 0.2;
player.rotation.x -= 0.2;
camera.position.z = player.position.z + 5;
camera.position.x = player.position.x;
renderer.render(scene, camera);
}
animate();
</script>
</body>
</html>
2
2
122KB
592KB
423.0ms
104.0ms
423.0ms