Meta Description" name="description" />
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>3D GTA Style Runner</title>
<style>
body { margin: 0; overflow: hidden; }
canvas { display: block; }
</style>
</head>
<body>
<script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/r128/three.min.js"></script>
<script>
let scene = new THREE.Scene();
scene.background = new THREE.Color(0x87ceeb);
let camera = new THREE.PerspectiveCamera(75, window.innerWidth/window.innerHeight, 0.1, 1000);
let renderer = new THREE.WebGLRenderer({antialias:true});
renderer.setSize(window.innerWidth, window.innerHeight);
document.body.appendChild(renderer.domElement);
// Lighting
let light = new THREE.DirectionalLight(0xffffff, 1);
light.position.set(10,20,10);
scene.add(light);
let ambient = new THREE.AmbientLight(0x404040);
scene.add(ambient);
// Ground
let groundGeo = new THREE.PlaneGeometry(200, 200);
let groundMat = new THREE.MeshStandardMaterial({color:0x333333});
let ground = new THREE.Mesh(groundGeo, groundMat);
ground.rotation.x = -Math.PI / 2;
scene.add(ground);
// Player (visible 3D character)
let playerGeo = new THREE.BoxGeometry(1,2,1);
let playerMat = new THREE.MeshStandardMaterial({color:0xff0000});
let player = new THREE.Mesh(playerGeo, playerMat);
player.position.y = 1;
scene.add(player);
// Buildings
function createBuilding(x,z){
let height = Math.random()*10+5;
let geo = new THREE.BoxGeometry(5,height,5);
let mat = new THREE.MeshStandardMaterial({color:0x555555});
let building = new THREE.Mesh(geo, mat);
building.position.set(x,height/2,z);
scene.add(building);
}
for(let i=-50;i<50;i+=15){
createBuilding(-15,i);
createBuilding(15,i);
}
// Camera position
camera.position.set(0,5,10);
// Controls
let keys = {};
document.addEventListener("keydown",(e)=>keys[e.key.toLowerCase()] = true);
document.addEventListener("keyup",(e)=>keys[e.key.toLowerCase()] = false);
let velocityY = 0;
let gravity = 0.01;
let canJump = true;
function animate(){
requestAnimationFrame(animate);
// Movement
if(keys["w"]) player.position.z -= 0.2;
if(keys["a"]) player.position.x -= 0.2;
if(keys["d"]) player.position.x += 0.2;
// Jump
if(keys[" "] && canJump){
velocityY = 0.2;
canJump = false;
}
velocityY -= gravity;
player.position.y += velocityY;
if(player.position.y <= 1){
player.position.y = 1;
velocityY = 0;
canJump = true;
}
// Camera follow (third person)
camera.position.x = player.position.x;
camera.position.z = player.position.z + 8;
camera.lookAt(player.position);
renderer.render(scene,camera);
}
animate();
</script>
</body>
2
2
122KB
592KB
2,028.0ms
1,488.0ms
2,028.0ms