package { import flash.display.*; import flash.events.*; import flash.geom.*; import flash.utils.*; import org.papervision3d.cameras.*; import org.papervision3d.materials.*; import org.papervision3d.objects.*; import org.papervision3d.scenes.*; import flash.ui.Keyboard; [SWF(backgroundColor="#000000", frameRate="60", width="400", height="400")] public class T6step1 extends Sprite { private static var PI:Number = Math.PI; private static var TH:Number = PI / 180; private var container:Sprite; private var scene:MovieScene3D; private var camera:Camera3D; private var map:Sprite; private var nextPoint:DisplayObject3D; private var keyCodeDown:Array = null; public function T6step1() { //背景 var bg:Sprite = new Sprite(); addChild(bg); bg.graphics.beginFill(0x999999); bg.graphics.drawRect(0, 0, 400, 400); bg.graphics.endFill(); // initialize the objects init3D(); // add a listener for the 3D loop addEventListener(Event.ENTER_FRAME, loop3D); //地圖 map = new Sprite(); addChild(map); map.x = 200; map.y = 200; stage.focus = this; this.stage.addEventListener(KeyboardEvent.KEY_DOWN, this.keyDownHandler); this.stage.addEventListener(KeyboardEvent.KEY_UP, this.keyUpHandler); } private function init3D():void{ container = new Sprite(); addChild(container); container.x = 200; container.y = 200; scene = new MovieScene3D(container); camera = new Camera3D(); camera.zoom = 15; camera.focus = 100; //跑道 var newX:Number; var newZ:Number; for(var i:int=0; i<360; i+=10){ newX = 900 * formatNum(Math.cos(i*TH), 3); newZ = 900 * formatNum(Math.sin(i*TH), 3); scene.addChild(new Cone(new ColorMaterial(0xffcc00), 5, 30, 8, 6, {x:newX, z:newZ}), "myCone1_" + i); newX = 800 * formatNum(Math.cos(i*TH), 3); newZ = 800 * formatNum(Math.sin(i*TH), 3); scene.addChild(new Cone(new ColorMaterial(0xffcc00), 5, 30, 8, 6, {x:newX, z:newZ}), "myCone2_" + i); } //移動控點 nextPoint = scene.addChild(new DisplayObject3D(), "nextPoint"); } private function loop3D(event:Event):void{ //camera.hover(0, container.mouseX / 20, container.mouseY / 10); if(keyCodeDown!=null){ var isMoving:Boolean = false; for(var i:int=0; i<keyCodeDown.length; i++){ if(keyCodeDown[i]==Keyboard.UP){ nextPoint.moveForward(30); isMoving = true; }else if(keyCodeDown[i]==Keyboard.DOWN){ nextPoint.moveBackward(25); isMoving = true; } } if(isMoving){ for(var i:int=0; i<keyCodeDown.length; i++){ if(keyCodeDown[i]==Keyboard.LEFT){ nextPoint.rotationY-=5; }else if(keyCodeDown[i]==Keyboard.RIGHT){ nextPoint.rotationY+=5; } } } } camera.target = nextPoint; camera.x = nextPoint.x; camera.y = nextPoint.y; camera.z = nextPoint.z; camera.rotationY = nextPoint.rotationY; camera.moveBackward(200); camera.moveUp(30); //camera.lookAt(nextPoint); scene.renderCamera(camera); //地圖 map.graphics.clear(); map.graphics.lineStyle(1); map.graphics.drawRect(-50, -50, 100, 100); //方塊群 var myCone:DisplayObject3D; for(var i:int=0; i<360; i+=10){ myCone = scene.getChildByName("myCone1_" + i); map.graphics.drawCircle((myCone.x)/20, (myCone.z)/20, 1); myCone = scene.getChildByName("myCone2_" + i); map.graphics.drawCircle((myCone.x)/20, (myCone.z)/20, 1); } map.graphics.lineStyle(1, 0xff0000); map.graphics.drawCircle((nextPoint.x)/20, -1*(nextPoint.z)/20, 1); } public function keyDownHandler(event:KeyboardEvent):void{ trace(event.keyCode); if(keyCodeDown==null){ keyCodeDown = new Array(); keyCodeDown.push(event.keyCode); }else{ for(var i:int=0; i<keyCodeDown.length; i++){ if(keyCodeDown[i]==event.keyCode){ return; } keyCodeDown.push(event.keyCode); } } } public function keyUpHandler(event:KeyboardEvent):void{ if(keyCodeDown!=null){ for(var i:int=keyCodeDown.length-1; i>=0; i--){ if(keyCodeDown[i]==event.keyCode){ keyCodeDown.splice(i, 1); } } if(keyCodeDown.length==0){ keyCodeDown = null; } } } private function formatNum(num:Number, cnt:Number):Number{ return Math.round(num * Math.pow(10, cnt)) / Math.pow(10, cnt); } }}
分享到:
相关推荐
【赛车游戏】是一款初级编程的学习资源,旨在帮助初学者通过实际操作理解编程的基本概念和技巧。这款游戏采用立体图形,提供了一种生动有趣的编程实践环境,让学习者在编写代码的同时,能够直观地看到程序运行的结果...
这些特性使得开发者能够构建出具有动态图形、音频和视频的富互联网应用程序,而无需依赖Flash或其他插件。 1. **语义化标签**:HTML5引入了新的语义化标签,如、、、和等,这些标签有助于提高网页内容的可读性和可...
【赛车游戏程序开发】 在IT领域,赛车游戏是一种广受欢迎的娱乐形式,它结合了编程技术、图形设计和游戏逻辑。对于那些希望学习C++编程并深入理解游戏开发的初学者来说,"saiche.rar_赛车"这个压缩包提供了一个宝贵...
在本项目中,"赛车游戏(适合初学者研究)"是一个专为编程初学者设计的教程,旨在帮助他们学习和理解游戏开发的基本概念。通过使用VC++这一经典的编程语言,初学者可以逐步掌握游戏编程的核心技能。以下是这个项目中...
在游戏设计中,环境是至关重要的一环,它可以为玩家营造出沉浸式的游戏体验。树木和建筑是游戏场景的重要组成部分,它们可以模拟真实世界中的赛道环境,让玩家在虚拟世界中感受到速度与激情。实现这些元素通常需要...
《Android游戏源码安卓单机3D赛车游戏项目》是一个专为Android平台设计的3D赛车游戏开发资源,它提供了一整套完整的源代码,帮助开发者深入理解Android游戏开发技术,特别是3D图形渲染和物理引擎的应用。在这个项目...
Scratch是麻省理工学院(MIT)媒体实验室“终身幼儿园团队”开发的一款面向少年儿童的图形化编程工具,旨在通过拖拽积木式的编程语块,让孩子们在玩耍中学习编程基础知识。 【描述】"赛车。-少儿编程scratch项目源...
6. **响应式设计**:为了适应不同设备的屏幕尺寸,游戏可能采用了响应式设计,通过媒体查询(Media Queries)调整布局和元素大小,确保在不同分辨率的设备上都能呈现良好的视觉效果。 7. **Web Workers**:为了提高...
在本教程中,我们将探讨如何开发一款HTML5 2D赛车游戏,并将其打包发布为手机应用程序。这是一项涉及Web技术和移动应用开发的综合任务,涵盖了HTML、CSS、JavaScript(特别是针对游戏开发的库如 Phaser)以及移动端...
在本教程中,我们将深入探讨如何使用HTML5技术开发2D赛车游戏,并将其打包发布为手机应用程序。HTML5因其跨平台兼容性和丰富的图形处理能力,成为制作网页游戏的理想选择。在第三话中,我们将专注于如何实现游戏的...
不过,根据上下文,这可能是有关遥控赛车的项目文件、源代码、教程文档,或者是一个模拟遥控赛车的软件应用程序。 在IT领域,遥控赛车可能涵盖以下知识点: 1. **嵌入式系统**:遥控赛车的核心是其内置的微控制器...
本次毕业设计主要任务是对方程式赛车的悬架系统进行设计分析,包括但不限于:了解FSAE的底盘规则、研究悬架系统的基本原理和设计要求、选择合适的轮辋和轮胎、确定赛车的轴距和轮距、选择悬架结构形式、绘制二维图形...
JavaScript游戏需要关注性能,可能使用了一些优化技巧,如减少DOM操作,缓存常量,避免全局变量,或者使用Web Workers处理复杂计算以防止阻塞主线程。 总的来说,"JS-CAR"项目不仅是一个娱乐应用,也是一个学习...
在这个“opencv小游戏_赛车游戏”项目中,我们有机会深入理解OpenCV如何用于创建交互式游戏。下面将详细探讨这个游戏的实现原理和关键知识点。 1. **基础概念** - **OpenCV**:OpenCV是一个跨平台的计算机视觉库,...
在当今的汽车工程领域中,FSAE(Formula SAE)大学生方程式赛车项目已经成为培养汽车设计与工程实践能力的重要平台。通过参与这一项目,学生不仅能够将理论知识与实际操作相结合,而且还能在团队合作中学习项目管理...
1. **教程文档**:详细介绍了如何使用LOGO语言控制海龟赛车,包括基本的移动、转向命令,以及更复杂的逻辑控制结构如循环和条件语句。 2. **示例代码**:提供了预设的海龟赛车代码,让学生能够立即看到结果,同时也...
1. "scratch":Scratch是由麻省理工学院(MIT)的“终身幼儿园团队”开发的一款面向儿童的图形化编程工具,它通过积木式的编程语块,让编程变得简单易懂。 2. "源代码":源代码是程序的原始形式,可以被程序员阅读、...
10. **响应式设计**:HTML5支持响应式设计,使得游戏能在不同屏幕尺寸和设备上运行良好,无论是桌面电脑还是移动设备。 11. **AJAX异步通信**:虽然游戏主要是离线运行,但在某些情况下,如排行榜、在线多人对战,...
Scratch是由麻省理工学院(MIT)媒体实验室“终身幼儿园团队”开发的,通过拖拽积木式的编程语块,让编程变得简单易懂,适合初学者尤其是儿童入门。 在这个项目中,孩子们将有机会了解和掌握以下编程知识点: 1. *...
- `app.js`: 这可能是游戏的主要应用程序逻辑代码,包含了游戏的控制、碰撞检测、得分计算等功能。 - `howler.js`: 是一个强大的HTML5音频管理库,用于播放、管理和控制游戏中的音效和背景音乐。 - `viewporter....