Flash media server录制视频

生活+工作 1 Comment »

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

生活+工作 No Comments »

Proximity Grid Example rewrited on PV3D2.0

生活+工作 1 Comment »

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

设计+开发 No Comments »

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);
  }
 }
}

Entries RSS
Copy all rights reserved by lotloft