Forked from: Peach_man's forked from: [PV3D] サンプル3 (3Dの視点を制御) diff:135 papervision test Johannes forked:1favorite:1lines:125license : MIT License modified : 2009-12-28 09:08:41 Embed Tweet package { import flash.events.*; import flash.display.*; import flash.geom.*; import flash.text.*; import org.papervision3d.materials.*; import org.papervision3d.materials.shadematerials.*; import org.papervision3d.lights.*; import org.papervision3d.objects.primitives.*; import org.papervision3d.view.*; [SWF(backgroundColor='0x3CC9EE')] public class Sample3 extends BasicView { public var ground1:Plane; public var bg1:Plane; public var player:Sphere; public var keyboard:Vector.<Boolean> = new Vector.<Boolean>(255); public var xv:Number = 0; public var yv:Number = 0; public var mv:Number = 10; public var light:PointLight3D; public var groundContainer3D:Vector.<Plane> = new Vector.<Plane>; public var groundContainer:Vector.<RSpace> = new Vector.<RSpace>; public var css:StyleSheet; public var txt:TextField; public function Sample3():void { stage.quality = StageQuality.LOW; light = new PointLight3D(true); light.x = 0; light.z = 100; light.y = 200; ground1 = new Plane(new FlatShadeMaterial(light, 0x068903, 0x04AA00), 1000, 150, 15, 5); ground1.rotationX = 90; bg1 = new Plane(new FlatShadeMaterial(light, 0x7E5303, 0x916004), 1000, 200, 15, 5); bg1.y = -100; bg1.z = -75; player = new Sphere(new GouraudMaterial(light, 0x888888, 0x333333), 50, 8, 6); player.x = -460; player.y = 50; css = new StyleSheet(); css.setStyle('p', { fontSize: 20, fontFamily: 'Verdana', display: 'inline', color: '#000000' }); txt = new TextField(); txt.styleSheet = css; txt.x = 5; txt.y = 5; txt.width = stage.stageWidth - 10; txt.height = 30; txt.textColor = 0x000000; txt.selectable = false; txt.htmlText = "<p>Gold: 0</p>"; stage.addChild(txt); scene.addChild(ground1); scene.addChild(bg1); scene.addChild(player); startRendering(); addEventListener(Event.ENTER_FRAME, loop); stage.addEventListener(KeyboardEvent.KEY_DOWN, kD); stage.addEventListener(KeyboardEvent.KEY_UP, kU); camera.target = player; camera.y = 100; } public function drawGround():void {} public function kD(e:KeyboardEvent):void { if(e.keyCode < 255) { keyboard[e.keyCode] = true; } } public function kU(e:KeyboardEvent):void { if(e.keyCode < 255) { keyboard[e.keyCode] = false; } } public function groundCollide():Boolean { return player.y < 51; } public function loop(e:Event):void { var dx:Number = -(camera.x - player.x); var dz:Number = camera.z - player.z; var d:Number = Math.sqrt(dx * dx + dz * dz); camera.x -= (camera.x - (player.x + dx / d * 250)) / 30; camera.y = 100 + player.y; camera.z -= (camera.z - (player.z + dz / d * 350)) / 10; if(keyboard[37]) { xv--; } if(keyboard[39]) { xv++; } if(xv > mv) xv = mv; if(xv < -mv) xv = -mv; if(!keyboard[37] && !keyboard[39]) { xv -= xv > 0 ? 1 : (xv < 0 ? -1 : 0); } player.y -= yv; if(!groundCollide()) { yv++; } else { yv = -Math.abs(yv * 0.7); if(yv > -2) { yv = 0; } if(keyboard[38]) { yv = -16; } } player.x += xv; player.rotationZ += -xv; light.x = player.x; light.y = player.y + 150; light.z = 0; } } } class RSpace { public var x:Number; public var y:Number; public var w:Number; public var h:Number; public var angle:Number; public function RSpace(_x:Number, _y:Number, _w:Number, _h:Number, _angle:Number) { x = _x; y = _y; w = _w; h = _h; angle = _angle; } } Code Fullscreen Preview Fullscreen Holy nice! by AceDecade at 2009/12/27 13:58:27 siouxcitizen.. light keyCode StyleSheet styleSheet setStyle KeyboardEvent display fontSize rotationZ rotationX addEventListener StageQuality.LOW KeyboardEvent.KEY_UP htmlText selectable KeyboardEvent.KEY_DOWN addChild target quality Boolean sort new page view favorite forked pv399 forked from: papervision test Johannes forked:2 favorite:1lines:58 (diff:106)