Archive for 6月, 2009

Flash media server录制视频

星期二, 6月 30th, 2009

初次用fms开发东西,大致看了一下网上的教程,安装和配置真的很简单,但是有一点,如果安装在D盘好像不能运行,所以最好装在C盘。装好之后再Flash Media Administration Console用安装是输入的用户名和密码登陆,就可以查看每个运行实例的情况了。此外,fms还支持cluster运行和动态分配加载,使视频播放更流畅。当然除了media server,还有个interactive server,可以用来开发多人在线的游戏或者程序。

地址

星期一, 6月 29th, 2009

Proximity Grid Example rewrited on PV3D2.0

星期三, 6月 24th, 2009

theflashblog看来的例子,不过Lee Brimelow是用pv3d旧版本写的,我把它改成了2.0版本。类似于鼠标排斥效果。
(Either JavaScript is not active or you are using an old version of Adobe Flash Player. Please install the newest Flash Player.)

import caurina.transitions.*;
import org.papervision3d.scenes.*;
import org.papervision3d.cameras.*;
import org.papervision3d.objects.*;
import org.papervision3d.objects.special.*;
import org.papervision3d.objects.primitives.*;
import org.papervision3d.materials.*;
import org.papervision3d.render.*;
import org.papervision3d.view.*;
import org.papervision3d.events.*;
import org.papervision3d.core.utils.*;
//初始化配置
var viewport:Viewport3D = new Viewport3D(400, 400, true, true);
addChild(viewport);
viewport.buttonMode = true;
var renderer:BasicRenderEngine = new BasicRenderEngine();
var scene:Scene3D = new Scene3D();
var camera:Camera3D = new Camera3D();
camera.zoom = 100;
///
var pa:Array = new Array();
for (var i:uint=0; i<10; i++) {
 for (var j:uint=0; j<10; j++) {
  var cm:BitmapAssetMaterial = new BitmapAssetMaterial("air");
  cm.oneSide = false;
  var p:Plane = new Plane(cm, 50, 50);
  p.x = j * 50 -25-200;
  p.y = i * 50 - 25-200;
  scene.addChild(p);
  pa.push({pl:p, rotY:Math.random() * 360, rotZ:Math.random() * 360, z:Math.random() * 30000});
  p.rotationY = pa[i].rotY;
  p.rotationZ = pa[i].rotZ;
  p.z = pa[i].z;
 }
}
//运行
addEventListener(Event.ENTER_FRAME,enterFrameFunc);
function enterFrameFunc(e:Event):void {
 for (var i:uint; i<pa.length; i++) {
  if (checkDist(pa[i].pl)) {
   Tweener.addTween(pa[i].pl, {rotationY:0, rotationZ:0, z:0, time:0.3});
  } else {
   Tweener.addTween(pa[i].pl, {rotationY:pa[i].rotY, rotationZ:pa[i].rotZ, z:pa[i].z, time:3});
  }
 }
 renderer.renderScene(scene, camera, viewport);
}

function checkDist(p:Plane):Boolean {
 var p1:Point = new Point(p.x, p.y);
 var p2:Point = new Point(stage.mouseX-200, -stage.mouseY+200);
 if (Point.distance(p1, p2) > 150) {
  return true;
 } else {
  return false;
 }

}


图片文件

BulkLoader类和PV3D

星期二, 6月 9th, 2009

AS3取消了movieclip的loader类,所以加载图片除了用

img = new Loader();
img.load(new URLRequest("assets/materials/c.png"));
//加载完成后的事件响应
img.contentLoaderInfo.addEventListener(Event.COMPLETE, setup);

就没有其他办法了,特别在要载入大量图片的环境下,就很难使用。
前几天发现了BulkLoader,大大简化了载入图片所需的步骤。而且可以对应各种格式,比如xml,video,声音,图片等文件。下面这个例子就是和pv3d结合使用的例子。
(Either JavaScript is not active or you are using an old version of Adobe Flash Player. Please install the newest Flash Player.)

package {
 import flash.display.Bitmap;
 import flash.display.BitmapData;
 import flash.events.Event;
 import br.com.stimuli.loading.BulkErrorEvent;
 import br.com.stimuli.loading.BulkLoader;
 import br.com.stimuli.loading.BulkProgressEvent;
 import org.papervision3d.lights.PointLight3D;
 import org.papervision3d.materials.BitmapMaterial;
 import org.papervision3d.materials.shaders.PhongShader;
 import org.papervision3d.materials.shaders.ShadedMaterial;
 import org.papervision3d.materials.shaders.Shader;
 import org.papervision3d.materials.utils.MaterialsList;
 import org.papervision3d.objects.primitives.Cube;
 import org.papervision3d.view.BasicView;
 [SWF(width="640", height="480", backgroundColor="#000000", frameRate="60")];
 public class CubeWithDifferentSides extends BasicView {
  private var light:PointLight3D;
  private var cube:Cube;
  //loading class
  public var loader : BulkLoader = new BulkLoader("main-site");
  public function CubeWithDifferentSides() {
   // Load images data
   loadImagesData();
  }
  private function loadImagesData():void {
   //var loader : BulkLoader = new BulkLoader("main-site");
   loader.add("images/back.jpg", {id:"back"});
   loader.add("images/bottom.jpg", {id:"bottom"});
   loader.add("images/front.jpg", {id:"front"});
   loader.add("images/left.jpg", {id:"left"});
   loader.add("images/right.jpg", {id:"right"});
   loader.add("images/top.jpg", {id:"top"});   
   loader.addEventListener(BulkLoader.COMPLETE, onAllLoaded);   
   loader.start();
  }
  
  public function onAllLoaded(evt:Event ):void {
   var materialsList:MaterialsList = new MaterialsList();
   light = new PointLight3D();
   materialsList.addMaterial(createShadedMaterial(loader.getBitmap("back")), "back");
   materialsList.addMaterial(createShadedMaterial(loader.getBitmap("bottom")), "bottom");
   materialsList.addMaterial(createShadedMaterial(loader.getBitmap("front")), "front");
   materialsList.addMaterial(createShadedMaterial(loader.getBitmap("left")), "left");
   materialsList.addMaterial(createShadedMaterial(loader.getBitmap("right")),"right");
   materialsList.addMaterial(createShadedMaterial(loader.getBitmap("top")), "top");
   cube = new Cube(materialsList, 500, 500, 500, 5, 5, 5);
   scene.addChild(cube);
   startRendering();
  }
  private function createShadedMaterial(bitmap:Bitmap):ShadedMaterial {
   trace(bitmap)
   var bitmapMaterial:BitmapMaterial = new BitmapMaterial(bitmap.bitmapData, true);
   var shader:Shader = new PhongShader(light, 0xffffff, 0x333333, 10, bitmap.bitmapData, bitmap.bitmapData);
   var shadedMaterial:ShadedMaterial = new ShadedMaterial(bitmapMaterial, shader);
   return shadedMaterial;
  }
  override protected function onRenderTick(event:Event=null):void {
   cube.rotationY += (viewport.containerSprite.mouseX - cube.rotationY) * .1;
   cube.rotationX += (viewport.containerSprite.mouseY - cube.rotationX) * .1;
   renderer.renderScene(scene, camera, viewport);
  }
 }
}