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); } }}
分享到:
相关推荐
这是一个小小的游戏,而且里面带有立体编程的图形示例,这样可以有很好的效果。这个程序也是自己第一个编程的游戏,以求与大家交流。
赛车必须依照国际汽车联合会制定颁发的车辆技术规则规定的程式制造,包括车体结构、长度和宽度、最低重量、发动机工作容积、汽缸数量、油箱容量、电子设备、轮胎的距离和大小等。以共同的方程式(规则限制)所造出来...
程式码片段 这个项目中的Road是最大的挑战之一,一个名为roadeditor的文件可以解决这个问题。 addRoad函数可以采用多个argumenets来创建不同的道路几何形状。 const addRoad = ( enter , hold , leave , curve , y ...
新版飞鸟完整版本 需要公众号才可以 新加入了防封策略,已经稳定半年没封了程序配置环境为linux系统注意不能架设在windwos阿帕奇+mysq5.5+php5.4安装说明: 需要公众号才可以 新加入了防封策略,已经稳定半年没封了...
Box2D + LibGDX自上而下的漂移车 有关如何使用Box2D和LibGDX创建具有漂移的2d汽车的示例 入门 该项目应导入到Android Studio或任何兼容的IDE中...程式语言 Java 使用的工具 您免费,易于使用且灵活的图块地图编辑器 贡
程序指标是用于创建游戏3D UI的包。目前它支持程序生成的箭头和选择指标。使用此包,您可以生成各种3D箭头。使用可编辑路径(点阵列,线段,贝塞尔曲线)定义箭头...非常适合策略,赛车和益智游戏或fps教程级别/目标。
摄像头黑线识别算法和赛车行驶控制策略.pdf 改进PID1.doc 改进PID2.doc 改进PID3.doc 数字PID及其参数整定方法(非常好).ppt 数字PID算法在无刷直流电机控制器中的应用.PDF 模糊控制.pdf 模糊控制.txt 模糊控制介绍...
F1FeederApp-用于F1赛车的运动Feed应用程序 F1FeederApp使用角度种子项目,因为它不仅提供了自举的强大框架,而且为单元测试奠定了基础。 我正在使用自动运动API服务...我正在将这个应用程序开发为AnguarJS的学习教程
DESAFÍOTECNICO BANCO RIPLEY-TRANSFORMACIÓNDIGITAL Mini Banco Se需要通过网络购买模拟货币Necesitan ...萨尔多州立方程式赛车队将在坎皮·德·蒙特的独奏中退役,然后退役。 La Cuenta no puede quedar con saldo
Game Boy的汇编教程,展示了如何利用滚动寄存器创建一些漂亮而有趣的效果。 介绍寄存器 SCY($ FF42)/ SCX($ FF43) SCY / SCX寄存器的用途很简单:在256x256像素的背景图上的某个位置指定屏幕左上像素(或视图,...
另一部分包含教程的示例代码,以了解计算机视觉程序的工作原理。 通过 Instructions.txt 文件使程序正常工作或通过 Tutorials 文件夹了解代码的工作原理 该项目是技术孵化器计划 - BITS Pilani KK Birla Goa Campus...
教师参考学习安全,学生学习案例,各种类型都有变色龙.sb3大胃王比赛.sb3独角仙巡线.sb3躲避落石.sb3躲避鲨鱼.sb3机器人采石.sb3驾照模拟器.sb3建造房屋.sb3建造桥梁.sb3墙来啦.sb3蚯蚓过关.sb3赛车超车.sb3沙漠摩托...
介绍循环骑士是libgdx自上而下的赛车游戏原型,当我申请Gamedev职位时,我被要求编写代码以展示我的编程技能。... 我使用了以下box2d教程来实现自上而下的汽车物理-> 汽车和轨道是按程序生成的box2d生成说明(桌面JAR)
特点:-交互式教程。 任何人都可以玩 在避开障碍物的同时,沿着山路滑雪。 不要崩溃! 特点:-互动教程。 任何人都可以玩这个游戏! -适合X运动的快速音乐。 -美丽的冬天圣诞节风景。 -收集横幅以赚取额外积分。 -...
Racing的首次探险,它创建了一个MATLAB应用程序以加载,清理,组织和分析赛车数据。 我们希望这个项目将使我们能够更快地分析我们的数据收集,并利用我们获得的信息对汽车的未来做出有意义的决策。 当然,如果您有...