You can't use lineTo and moveTo to draw in 3d natively and you don't have a 3d camera natively.
make one. Please see the code below.
I want to be able to draw in 3d space in Flash that I can move and rotate. I also want it to be very understandable and easy to use.
In rar files there is all the code of the next example.
You can move with the arrows and with Q W E as well as rotate with A and D.
Now lets see the code:
var DEG_TO_RAD : Number = Math.PI/180;
function render(mc:MovieClip,model:Array):void{
/*render the movie clip
drow all the 3d point in the array to the movie clip*/
mc.graphics.clear();
mc.graphics.lineStyle(1,0);
var len:int=model.length;
var X:Number;
var Y:Number;
var Z:Number;
var dis:Number;
var RX:Number;
for(var i:int=0;i<len;i++){
X=model[i][1];
Y=model[i][2];
Z=model[i][3];
RX=X*(200/Z);
dis=Math.sqrt(X*X+Y*Y+Z*Z);
if(Z>0 && dis<1000 &&RX<1000
&&RX>-1000){
if(model[i][0]=="l"){
mc.graphics.lineTo(RX,Y *(200/(Z)));
}else{mc.graphics.moveTo(RX,Y *(200/Z)); }
}else{
if(dis<1000){
Z=1;
mc.graphics.moveTo(X*(200/Z),Y *(200/Z));
}
}
}
}
function addP3d(model:Array,X:Number=0,Y:Number=0,Z:Number=1):void{
/*add a 3d point to the array*/
model.push(["l",X,Y,Z]);
}
function addMP(model:Array,X:Number=0,Y:Number=0,Z:Number=1):void{
/*add a 3d point of moving to the array*/
model.push(["m",X,Y,Z]);
}
/*all the next function move the 3d camera*/
function moveX(model:Array,speed:Number=10):void{
var len:int=model.length;
for(var i:int=0;i<len;i++){
model[i][1]+=speed;
}
}
function moveY(model:Array,speed:Number=10):void{
var len:int=model.length;
for(var i:int=0;i<len;i++){
model[i][2]+=speed;
}
}
function moveZ(model:Array,speed:Number=10):void{
var len:int=model.length;
for(var i:int=0;i<len;i++){
model[i][3]+=speed;
}
}
/*all the next function rotate the 3d camera*/
function rotY(model:Array,angle:Number=7):void{
/*rotate the 3d camera y in the speed*/
var len:int=model.length;
for(var i:int=0;i<len;i++){
var cosRY:Number = Math.cos(angle * DEG_TO_RAD);
var sinRY:Number = Math.sin(angle * DEG_TO_RAD);
var tempZ:Number=model[i][3];
var tempY:Number=model[i][2];
model[i][2] = (tempY*cosRY)-(tempZ*sinRY);
model[i][3]= (tempY*sinRY)+(tempZ*cosRY);
}
}
function rotZ(model:Array,angle:Number=7):void{
var len:int=model.length;
for(var i:int=0;i<len;i++){
var cosRY:Number = Math.cos(angle * DEG_TO_RAD);
var sinRY:Number = Math.sin(angle * DEG_TO_RAD);
var tempX:Number=model[i][1];
var tempY:Number=model[i][2];
model[i][1] = (tempX*cosRY)-(tempY*sinRY);
model[i][2] = (tempX*sinRY)+(tempY*cosRY);
}
}
function rotX(model:Array,angle:Number=7):void{
var len:int=model.length;
for(var i:int=0;i<len;i++){
var cosRY:Number = Math.cos(angle * DEG_TO_RAD);
var sinRY:Number = Math.sin(angle * DEG_TO_RAD);
var tempZ:Number=model[i][3];
var tempX:Number=model[i][1];
model[i][1] = (tempX*cosRY)+(tempZ*sinRY);
model[i][3]= (tempX*-sinRY)+(tempZ*cosRY);
}
}
/*function
lineTo3d(mc:MovieClip,X:Number=0,Y:Number=0,Z:Number=1):void{
mc.graphics.lineTo(X*(200/(20+Z)),Y *(200/(20+Z)));
}
function
moveTo3d(mc:MovieClip,X:Number=0,Y:Number=0,Z:Number=1):void{
mc.graphics.moveTo(X*(200/(20+Z)),Y *(200/(20+Z)));
}*/
The following code handles the key press simply cope it to a new layer.
var keyArray:Array = new Array();
for(var k:int=0;k<222;k++){
keyArray.push([k,false]);
}
stage.addEventListener(KeyboardEvent.KEY_DOWN,checkKeysDown);
stage.addEventListener(KeyboardEvent.KEY_UP,checkKeysUp);
function checkKeysDown(event:KeyboardEvent):void{
keyArray[event.keyCode][1]=true;
}
function checkKeysUp(event:KeyboardEvent):void{
keyArray[event.keyCode][1]=false;
}
function KeyDown(X){
return keyArray[X][1];
}
The code below is what you need to do to work with this engine.
var env:Array=new Array();//hold the 3d
points
var cam:MovieClip=new MovieClip(); //the mc you draw on
addChild(cam);
addEventListener(Event.ENTER_FRAME,drow);
cam.x=stage.stageWidth*0.5;
cam.y=stage.stageHeight*0.5;
var X2:Number=0;
var Y2:Number=0;
function drow(e):void
{
//render(cam,env);
if(KeyDown(37)){
moveX(env);
render(cam,env);
}
if(KeyDown(39)){
moveX(env,-10);
render(cam,env);
}
if(KeyDown(87)){
moveZ(env,-10);
render(cam,env);
}
if(KeyDown(38)){
moveZ(env,-10);
render(cam,env);
}
if(KeyDown(40)){
moveZ(env);
render(cam,env);
}
if(KeyDown(69)){
moveX(env,-7)
render(cam,env);
}
if(KeyDown(81)){
moveX(env,7)
render(cam,env);
}
if(KeyDown(65)){
rotX(env,7)
render(cam,env);
}
if(KeyDown(68)){
rotX(env,-7)
render(cam,env);
}
if(KeyDown(83)){
moveZ(env,7)
render(cam,env);
}
}
X2=-70;
Y2=-100;
for(var g:int=1;g<1000;g++){
addMP(env,X2,Y2,g*20);
addP3d(env,X2+200,Y2,g*20);
addP3d(env,X2+200,Y2+200,g*20);
addP3d(env,X2,Y2+200,g*20);
addP3d(env,X2,Y2,g*20);
}
render(cam,env);
+