原生js编写的一款三维赛车游戏
代码语言:html
所属分类:游戏
代码描述:原生js编写的一款三维赛车游戏,玩法:鼠标 = 转向,点击 = 刹车,双击 = 跳转,R = 重新启动,1 = 屏幕截图。道路是随机生成的,每次都不同。您从 20 秒开始,通过检查点再获得 10 秒。通过转向或跳过岩石和树木来避开它们。路在1000结束,祝你好运!
下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开
<html> <!--/* HUE JUMPER - By Frank Force Low fi retro inspired endless runner in only 2 kilobytes! Features - Retro style 3D rendering engine in full HD - Realistic driving physics and collisions - Random level generation with increasing difficulty - Gradient sky with sun and moon - Procedurally generated mountain range - Random trees and rocks - Camera rumble and slow when off road - Checkpoint system, road markers, and hue shift - Time and distance display */--> <title>Hue Jumper</title> <meta charset="utf-8"> <body bgcolor=#000> <canvas id=c style='touch-action:none;position:absolute;left:0px;top:0px;width:100%;height:100%'></canvas> <a hidden id=downloadLink></a> <script> 'use strict'; // strict mode // debug settings const debug = 0; // enable debug features const usePointerLock = 1; // remove pointer lock for 2k build // draw settings const context = c.getContext('2d'); // canvas 2d context const drawDistance = 800; // how many road segments to draw in front of player const cameraDepth = 1; // FOV of camera (1 / Math.tan((fieldOfView/2) * Math.PI/180)) const roadSegmentLength = 100; // length of each road segment const roadWidth = 500; // how wide is road const warningTrackWidth = 150; // with of road plus warning track const dashLineWidth = 9; // width of the dashed line in the road const maxPlayerX = 2e3; // player can not move this far from center of road const mountainCount = 30; // how many mountains are there const timeDelta = 1/60; // inverse frame rate // player settings const playerHeight = 150; // how high is player above ground const playerMaxSpeed = 300; // limit max player speed const playerAccel = 1; // player acceleration const playerBrake = -3; // player acceleration when breaking const playerTurnControl = .2; // player turning rate const playerJumpSpeed = 25; // z speed added for jump const playerSpringConstant = .01; // spring players pitch const playerCollisionSlow = .1; // slow down from collisions const pitchLerp = .1; // speed that camera pitch changes const pitchSpringDamping = .9; // dampen the pitch spring const elasticity = 1.2; // bounce elasticity (2 is full bounce, 1 is none) const centrifugal = .002; // how much to pull player on turns const forwardDamping = .999; // dampen player z speed const lateralDamping = .7; // dampen player x speed const offRoadDamping = .98; // more damping when off road const gravity = -1; // gravity to apply in y axis const cameraHeadingScale = 2; // scale of player turning to rotate camera const worldRotateScale = .00005; // how much to rotate world around turns // level settings const maxTime = 20; // time to start with const checkPointTime = 10; // how much time for getting to checkpoint const checkPointDistance = 1e5; // how far between checkpoints const checkpointMaxDifficulty = 9; // how many checkpoints before max difficulty const roadEnd = 1e4; // how many sections until end of the road // global game variables let playerPos; // player position 3d vector let playerVelocity; // player velocity 3d vector let playerPitchSpring; // spring for player pitch bounce let playerPitchSpringVelocity; // velocity of pitch spring let playerPitchRoad; // pitch of road, or 0 if player is in air let playerAirFrame; // how many frames player has been in air let worldHeading; // heading to turn skybox let randomSeed; // random seed for level let startRandomSeed; // save the starting seed for active use let nextCheckPoint; // distance of next checkpoint let hueShift; // current hue shift for all hsl colors let road; // the list of road segments let time; // time left before game over let lastUpdate = 0; // time of last update let timeBuffer = 0; // frame rate adjustment function StartLevel() { ///////////////////////////////////////////////////////////////////////////////////// // build the road with procedural generation ///////////////////////////////////////////////////////////////////////////////////// let roadGenSectionDistanceMax = 0; // init end of section distance let roadGenWidth = roadWidth; // starting road width let roadGenSectionDistance = 0; // distance left for this section let roadGenTaper = 0; // length of taper let roadGenWaveFrequencyX = 0; // X wave frequency let roadGenWaveFrequencyY = 0; // Y wave frequency let roadGenWaveScaleX = 0; // X wave amplitude (turn size) let roadGenWaveScaleY = 0; // Y wave amplitude (hill size) startRandomSeed = randomSeed = Date.now(); // set random seed road = []; // clear list of road segments // generate the road for( let i = 0; i < roadEnd*2; ++i ) // build road past end { if (roadGenSectionDistance++ >.........完整代码请登录后点击上方下载按钮下载查看
网友评论0