PV3Dでのアニメーション
下記のソースですが、以下のような動きを追加したいと考えています。
・直方体の側面(4方向共)に10数個の矢印を縦に並べる
・矢印の向きは直方体方向
・矢印の先は円錐型ではなく、四角柱型もしくはarrowクラスの
ような形
・カメラの初期位置を今の位置から更にx軸方向にもってくる
(初期画面で軸が三菱のマークに見えるようなイメージ)
です。
問題なのが、arrowクラスの引数が色指定しかない為、任意の大きさに
指定して配置することができません。自分でシンボルを作って配置する
しかないのでしょうか。
また、テキストのyがどうしてもyに見えないのですが解決方法はありますか?
以下にソースを貼りますので、ご教授ください。
import org.papervision3d.view.BasicView
import org.papervision3d.objects.DisplayObject3D
import org.papervision3d.objects.primitives.*
import org.papervision3d.objects.special.VectorShape3D
import org.papervision3d.materials.ColorMaterial
import org.papervision3d.materials.utils.MaterialsList
import org.papervision3d.materials.shadematerials.FlatShadeMaterial
import org.papervision3d.materials.MovieMaterial
import org.papervision3d.lights.PointLight3D
var vw=new BasicView(1,1,true,false)
var mtr:ColorMaterial = new ColorMaterial(0x000000);
var mtr1:ColorMaterial = new ColorMaterial(0x33AA88);
var light:PointLight3D=new PointLight3D(false)
var shdMtr:FlatShadeMaterial=new FlatShadeMaterial(light,0xAAFFCC,0x338844)
var mtrList:MaterialsList=new MaterialsList({all:shdMtr})
var cubeList=new Array()
var vecList=new Array()
var txtList=new Array()
var drc:Number=0
var dst:Number=500
var rot:Number=0
var prevX:Number=mouseX
for(var i=0;i<3;i++){
cubeList.push(new Cube(mtrList,60,60,200))
vw.scene.addChild(cubeList[i])
cubeList[i].x=150
cubeList[i].y=150
cubeList[i].z=150
vecList.push(new DisplayObject3D())
var cone=new Cone(mtr,10,30)
var bar=new Cylinder(mtr,3,250)
cone.y=250
bar.y=125
vecList[i].addChild(cone)
vecList[i].addChild(bar)
vecList[i][["rotationX","rotationY","rotationZ"][i]]=90
if(i==2)vecList[i].rotationZ=-90
vw.scene.addChild(vecList[i])
var movMtr=new MovieMaterial(makeTxtMov(["x","y","z"][i]),true,false,true)
movMtr.oneSide=false
txtList.push(new Plane(movMtr,50,50))
txtList[i][["x","y","z"][i]]=300
vw.scene.addChild(txtList[i])
}
function makeTxtMov(str:String):MovieClip{
var rtn=new MovieClip()
var fld=new TextField()
var fmt=new TextFormat
fmt.size=100
fmt.color=0x000000
fld.defaultTextFormat=fmt
fld.text=str
rtn.addChild(fld)
return rtn
}
light.y=light.x=light.z=500
vw.camera.y=300
vw.startRendering()
addChild(vw)
vw.y=50
addEventListener(Event.ENTER_FRAME,frameTick)
function frameTick(e){
drc+=rot
rot*=0.98
for each(var txt in txtList)txt.rotationY=-drc*180/Math.PI-90
vw.camera.x=light.x=Math.cos(drc)*dst
vw.camera.z=light.z=Math.sin(drc)*dst
}
stage.addEventListener(MouseEvent.MOUSE_DOWN,function(e){prevX=mouseX;stage.addEventListener(Event.ENTER_FRAME,setRot)})
stage.addEventListener(MouseEvent.MOUSE_UP,function(e){stage.removeEventListener(Event.ENTER_FRAME,setRot)})
function setRot(e){
rot=(prevX-mouseX)/300
prevX=mouseX
}
※元ソースは頂き物です。
お礼
返事が遅くなりました。 初歩的な質問にお答えいただき、ありがとうございました。 無事解決しました。