Home > Flash | WEB > Box2D,Papervision3Dでフリースローゲームを3D表示

Box2D,Papervision3Dでフリースローゲームを3D表示

前々回のエントリでBox2DとPapervision3dを連携させてみて、
前のフリースローも似たようなことできるんじゃないかと思ってやってみた。

ボールを投げたところからだけ3Dでシミュレーションします。
環境によってはすごい重いと思います。

縦長w 長すぎましたねw 下だけ表示でもなんとなく操作できます。
今回は「←」「→」キーで前後に移動できるようにしました。
「クリック」、「s」キーで方向、パワー決定してシュート!

基本的には前のエントリとやってることは同じです。
Box2dな方のソースは整理中・・・。

シーンをENTER_FRAMEイベントで書き出し続けつつ、
Box2DのほうからupDatePositionsを呼んで、カメラ、ボールの位置を変更しています。

ACTIONSCRIPT:
  1. private function onEnterHandler(event:Event):void {
  2.             ball.rotationY += 5;
  3.             renderer.renderScene(scene, camera, viewPort);
  4.         }
  5.        
  6.         public function upDatePositions( boy_pos, ball_x, ball_y,ball_angle) {
  7.             camera.z = -100 + boy_pos/1.5;
  8.             ball.z = -100 + ball_x * 90;
  9.             ball.y = 925 - ball_y * 90;
  10.         }

↓Papervision3Dのほうのソース全部

ちょっと強引な部分もありますw

ACTIONSCRIPT:
  1. package{
  2.     import caurina.transitions.Tweener;
  3.    
  4.     import flash.display.Sprite;
  5.     import flash.events.Event;
  6.    
  7.     import org.papervision3d.cameras.Camera3D;
  8.     import org.papervision3d.lights.PointLight3D;
  9.     import org.papervision3d.materials.ColorMaterial;
  10.     import org.papervision3d.materials.WireframeMaterial;
  11.     import org.papervision3d.materials.shadematerials.PhongMaterial;
  12.     import org.papervision3d.materials.special.CompositeMaterial;
  13.     import org.papervision3d.materials.utils.MaterialsList;
  14.     import org.papervision3d.objects.DisplayObject3D;
  15.     import org.papervision3d.objects.primitives.Cube;
  16.     import org.papervision3d.objects.primitives.Plane;
  17.     import org.papervision3d.objects.primitives.Sphere;
  18.     import org.papervision3d.render.BasicRenderEngine;
  19.     import org.papervision3d.scenes.Scene3D;
  20.     import org.papervision3d.view.Viewport3D;
  21.    
  22.     /**
  23.     * @author Default
  24.     */
  25.     public class Basket3D extends Sprite{
  26.         private var scene:Scene3D;
  27.         private var camera:Camera3D;
  28.         private var viewPort:Viewport3D;
  29.         private var renderer:BasicRenderEngine;
  30.         private var rootNode:DisplayObject3D;
  31.        
  32.         private var floor:Cube;
  33.         private var wall:Cube;
  34.         private var whiteBoard:Plane;
  35.        
  36.         private var ball:Sphere;
  37.        
  38.         private var _light:PointLight3D;
  39.        
  40.         private var cameraView_y:Number = 50;
  41.         private var cameraView_z:Number = -400;
  42.         private var cameraView_angle:Number = 0;
  43.        
  44.         public function Basket3D() {
  45.             init3D();
  46.         }
  47.        
  48.         private function init3D():void{
  49.             // create renderer
  50.             renderer = new BasicRenderEngine();
  51.            
  52.             // create scene
  53.             scene = new Scene3D();
  54.            
  55.             // create viewport
  56.             viewPort = new Viewport3D(0, 0, true, false);
  57.             addChild(viewPort);
  58.            
  59.             // create camera
  60.             camera = new Camera3D;
  61.             camera.y = 500;
  62.             camera.z = -100;
  63.             camera.x = 600;
  64.             camera.rotationX = 15;
  65.             camera.rotationY = -45;
  66.            
  67.             // create root node
  68.             rootNode = scene.addChild( new DisplayObject3D("rootNode") );
  69.            
  70.             _light = new PointLight3D;
  71.             _light.x = -100;
  72.             _light.y = 100;
  73.             _light.z = 40;
  74.            
  75.             var colorMaterial:ColorMaterial = new ColorMaterial(0xFFCCCC, 1);
  76.             var wireMaterial:WireframeMaterial = new WireframeMaterial(0xFFCCCC, 1);
  77.             var phongMaterial:PhongMaterial = new PhongMaterial(_light, 0xF7D49E, 0xFFEEEE, 1);
  78.             var compMaterial:CompositeMaterial = new CompositeMaterial;
  79.             var materialsList:MaterialsList = new MaterialsList;
  80.            
  81.             compMaterial.addMaterial(phongMaterial);
  82.             compMaterial.addMaterial(wireMaterial);
  83.             materialsList.addMaterial(compMaterial, "all");
  84.             floor = new Cube(materialsList, 700, 1080, 20);
  85.             floor.z = 540;
  86.             rootNode.addChild(floor);
  87.            
  88.             wall = new Cube(materialsList, 700, 20, 1600);
  89.             wall.y = 800;
  90.             wall.z = 1120;
  91.             rootNode.addChild(wall);
  92.            
  93.             var whiteMateril:ColorMaterial = new ColorMaterial(0xFFFFFF);
  94.             var balckWireMaterial:WireframeMaterial = new WireframeMaterial(0x000000);
  95.             var boardCompMaterial:CompositeMaterial = new CompositeMaterial;
  96.             boardCompMaterial.addMaterial(whiteMateril);
  97.             boardCompMaterial.addMaterial(balckWireMaterial);
  98.             whiteBoard = new Plane(boardCompMaterial, 350, 200);
  99.             whiteBoard.z = 980;
  100.             whiteBoard.y = 550;
  101.             rootNode.addChild(whiteBoard);
  102.            
  103.             var ballPhongMaterial:PhongMaterial = new PhongMaterial(_light, 0xFD783D, 0xFBBA49, 1);
  104.             var ballWireMaterial:WireframeMaterial = new WireframeMaterial(0xFD783D);
  105.             var ballCompMaterial:CompositeMaterial = new CompositeMaterial;
  106.             ballCompMaterial.addMaterial(ballPhongMaterial);
  107.             ballCompMaterial.addMaterial(ballWireMaterial);
  108.             ball = new Sphere(ballCompMaterial, 25);
  109.             ball.z = 200;
  110.             ball.y = 100;
  111.             rootNode.addChild(ball);
  112.            
  113.             renderer.renderScene(scene, camera, viewPort);
  114.             this.addEventListener(Event.ENTER_FRAME, onEnterHandler);
  115.             Tweener.addTween(camera, { x:0, y:this.cameraView_y, z:this.cameraView_z,rotationY:0,rotationX:this.cameraView_angle,time:3, transition:"liner" } );
  116.         }
  117.        
  118.         private function onEnterHandler(event:Event):void {
  119.             ball.rotationY += 5;
  120.             renderer.renderScene(scene, camera, viewPort);
  121.         }
  122.        
  123.         public function upDatePositions( boy_pos, ball_x, ball_y,ball_angle) {
  124.             camera.z = -100 + boy_pos/1.5;
  125.             ball.z = -100 + ball_x * 90;
  126.             ball.y = 925 - ball_y * 90;
  127.         }
  128.     }
  129. }

Comments:0

Comment Form
Remember personal info

Trackbacks:0

Trackback URL for this entry
http://parpue.net/web/157/trackback
Listed below are links to weblogs that reference
Box2D,Papervision3Dでフリースローゲームを3D表示 from parpue.net

Home > Flash | WEB > Box2D,Papervision3Dでフリースローゲームを3D表示

リンク
chocolataste-planner
millon

サーチ
Feeds
Meta
blog ranking ブログランキング・にほんブログ村へ
にほんブログ村 テクノラティのお気に入りに追加する

Return to page top