I wanna make simple game, but I have some trouble...
please help me to make bound of object, in order that I can find like
a hitTest
sorry I'm newbie (please give me the solution)
thx... T_T
// import containers
import away3d.containers.*;
// import core library
import away3d.core.base.*;
// import file format loaders
import away3d.loaders.*;
//import math objects
import away3d.core.math.*;
//import event object
import away3d.events.*;
import away3d.primitives.*;
import away3d.cameras.*;
import flash.events.KeyboardEvent;
import flash.ui.*;
var rotCamera:Boolean;
var firstClick:Boolean;
var lastMouseX:Number = mouseX;
var lastMouseY:Number = mouseY;
var moves:Boolean;
var mov:Number;
var rnd:Number;
var rnd2:Number;
var tembak:Boolean;
var pos:Number;
var posrnd:Number;
var kon:Number;
var AItembak:Boolean;
var mov2:Number;
var pos2:Number;
var posrnd2:Number;
var kon2:Number;
var movP:Number;
// create a 3D-viewport
var camera = new HoverCamera3D({zoom:3, focus:300, distance:1000});
// create a 3D-viewport
camera.tiltangle = 40;
camera.targettiltangle = 40;
camera.mintiltangle = 20;
camera.maxtiltangle = 50;
camera.yfactor = 1;
camera.steps = 7;
var view:View3D = new View3D({camera:camera, x:300, y:300});
// add viewport to the stage
addChild(view);
var peluruP:Object3D = new Sphere({material:"red", radius:15,
segmentsW:9, segmentsH:6, y:30, x:0, z:0});
// add the peluruP to the scene
view.scene.addChild(peluruP);
var sphere2:Object3D =new Sphere({material:"red", radius:15, segmentsW:
9, segmentsH:6, y:30, x:0, z:0});
// add the sphere to the scene
//view.scene.addChild(sphere2);
var peluruAI:Object3D = new ObjectContainer3D({x:420, z:-420},
sphere2);
view.scene.addChild(peluruAI);
/*var cube1:Object3D = new Cube({material:"box", x:100, y:40,width:80,
height:80, depth:80});
view.scene.addChild(cube1);
var cube2:Object3D = new Cube({material:"box",scaling:0.8, z:300,x:
300, y:40, width:80, height:80, depth:80});
view.scene.addChild(cube2);
var cube3:Object3D = new Cube({material:"box",scaling:0.8, x:-100, z:
100, y:40, width:80, height:80, depth:80});
view.scene.addChild(cube3);
var cube4:Object3D = new Cube({material:"box",scaling:0.8, z:-300, y:
40, width:80, height:80, depth:80});
view.scene.addChild(cube4);
var cube5:Object3D = new Cube({material:"box",scaling:0.8, z:
300,x:-300, y:40, width:80, height:80, depth:80});
view.scene.addChild(cube5);
var cube6:Object3D = new Cube({material:"box",scaling:0.8, x:400, y:
40,width:80, height:80, depth:80});
view.scene.addChild(cube6);
var cube7:Object3D = new Cube({material:"box",scaling:0.8, z:-400, y:
40, x:400, width:80, height:80, depth:80});
view.scene.addChild(cube7);
var cube8:Object3D = new Cube({material:"box",scaling:0.8, x:-300,
z:-300, y:40, width:80, height:80, depth:80});
view.scene.addChild(cube8);
var cubes:Object3D = new ObjectContainer3D({x:0}, cube1, cube2, cube3,
cube4, cube5, cube6, cube7, cube8);
view.scene.addChild(cubes);*/
var plane:Object3D = new Plane({material:"map", name:"map", x:0, y:0,
z:0, width:1000, height:1000, segmentsW:6, pushback:true});
view.scene.addChild(plane);
var tank:Object3DLoader = Obj.load("resources/tank.obj",
{material:"tank_texture", name:"tank", scaling:0.1, y:0, x:0, z:0,
loadersize:300});
view.scene.addChild(tank);
var tank2:Object3DLoader = Obj.load("resources/tank.obj",
{material:"tank2_texture", name:"tank2", scaling:0.1, y:0, x:0, z:0,
loadersize:300});
tank2.rotationY = 90;
view.scene.addChild(tank2);
var tank3:Object3DLoader = Obj.load("resources/tank.obj",
{material:"tank2_texture", name:"tank3", scaling:0.1, y:0, x:0, z:0,
loadersize:300});
tank3.rotationY = 90;
view.scene.addChild(tank3);
var tank4:Object3DLoader = Obj.load("resources/tank.obj",
{material:"tank2_texture", name:"tank4", scaling:0.1, y:0, x:0, z:0,
loadersize:300});
tank4.rotationY = 90;
view.scene.addChild(tank4);
var maps:Object3D = new ObjectContainer3D({x:0}, plane);
view.scene.addChild(maps);
var enemy:Object3D = new ObjectContainer3D({z:-420}, tank2);
view.scene.addChild(enemy);
var enemy2:Object3D = new ObjectContainer3D({x:420, z:-420}, tank3);
view.scene.addChild(enemy2);
var enemy3:Object3D = new ObjectContainer3D({x:-420, z:-420}, tank4);
view.scene.addChild(enemy3);
var object:Object3D = new ObjectContainer3D({z:420},tank);
object.rotationY = -90;
view.scene.addChild(object);
/*var mesh:Mesh;
mesh = tank as Mesh;
var enemy:Object3D = new ObjectContainer3D(mesh.clone(), {x:150,
mouseEnabled:false});
view.scene.addChild(enemy);*/
// add the loader object to the scene
//loader2.rotationY = 45;
//view.scene.addChild(loader2);
// position camera
view.scene.rotationY = 45;
view.camera.position = new Number3D(1000, 900, 1000);
view.camera.lookAt(object.position);
function onKeyDownEvent(event:KeyboardEvent):void {
if (moves==true) {
if (event.keyCode == Keyboard.SPACE) {
peluruP.x = object.x;
peluruP.z = object.z;
tembak = true;
}
if (event.keyCode == Keyboard.LEFT) {
object.rotationY -=90;
trace(object.rotationY);
}
if (event.keyCode == Keyboard.RIGHT) {
object.rotationY +=90;
trace(object.rotationY);
}
if (event.keyCode == Keyboard.UP) {
if ((movP==1)&&(object.x > -420)) {
object.x -= 10;
} else if ((movP ==2)&&(object.z < 450)) {
object.z +=10;
} else if ((movP ==3)&&(object.x < 420)) {
object.x +=10;
} else if ((movP ==4)&&(object.z > -380)) {
object.z -=10;
}
// camera.focus = camera.focus + 5;
}
if (event.keyCode == Keyboard.DOWN) {
if ((movP==1)&&(object.x < 420)) {
object.x += 10;
} else if ((movP ==2)&&(object.z > -380)) {
object.z -=10;
} else if ((movP ==3)&&(object.x > -420)) {
object.x -=10;
} else if ((movP ==4)&&(object.z < 450)) {
object.z +=10;
}
// camera.focus = camera.focus - 5;
}
}
}
// every frame
peluruAI.visible= false;
peluruP.visible= false;
addEventListener(Event.ENTER_FRAME, onEnterFrame);
function onEnterFrame(event:Event):void {
enemy.visible=true;
object.visible=true;
/*if (object.hitTestObject(enemy)) {
trace("hit");
}*/
if (((object.x==enemy.x)&&(enemy.z+5>=object.z>=enemy.z-5))||
((object.x==enemy.x)&&(enemy.z+5>=object.z>=enemy.z-5))||
((object.z==enemy.z)&&(enemy.x+5>=object.x>=enemy.x-5))||
((object.z==enemy.z)&&(enemy.x+5>=object.x>=enemy.x-5))) {
enemy.visible=false;
}
//fungsi PLAYER tembak
if ((tembak==true)&&(movP==1)) {
peluruP.visible= true;
peluruP.x = object.x;
peluruP.z = object.z;
//peluruP.x +=5;
trace(enemy.x);
trace(peluruP.x);
}
if ((tembak==true)&&(movP==2)) {
peluruP.x = object.x;
peluruP.z = object.z;
//peluruP.z +=(getTimer() / 100)*5;
//peluruP.z +=5;
}
if ((tembak==true)&&(movP==3)) {
peluruP.x = object.x;
peluruP.z = object.z;
//peluruP.x +=(getTimer() / 100)*5;
//peluruP.x +=5;
}
if ((tembak==true)&&(movP==4)) {
peluruP.x = object.x;
peluruP.z = object.z;
//peluruP.z -=5;
}
if (rotCamera) {
if (firstClick == true) {
firstClick = false;
lastMouseX = view.mouseX;
lastMouseY = view.mouseY;
trace("frist click");
}
//
var dragX = (view.mouseX - lastMouseX);
var dragY = (view.mouseY - lastMouseY);
//
lastMouseX = view.mouseX;
lastMouseY = view.mouseY;
camera.targetpanangle += dragX;
camera.targettiltangle += dragY;
camera.hover();
camera.rotationY +=10;
} else {
/*
view.camera.position = new Number3D(1000, 900, 1000);
view.camera.lookAt(object.position);
*/
}
// AI
rnd=Math.floor(Math.random()*5);
//trace(rnd);
rnd2=Math.floor(Math.random()*5);
moves = true;
//tembak=true;
if (moves==true) {
mov=kon;
mov2=kon2;
//AI.1
posrnd=Math.round((Math.sin(rnd)*30))*10;
pos = Math.round(posrnd);
//trace(pos);
//trace(posrnd);
//
if ((mov ==2)&&(enemy.z < 420)) {
//enemy.z +=5;
kon=2;
if ((enemy.x==pos)||(enemy.z==pos)) {
AItembak=true;
kon = Math.floor(rnd);
kon;
//trace(rnd);
}
} else {
kon = Math.floor(rnd);
}
if ((mov==1)&&(enemy.x > -400)&&(enemy.x < 400)) {
//enemy.x -= 5;
kon=1;
if ((enemy.x==pos)||(enemy.z==pos)) {
AItembak=true;
kon = Math.floor(rnd);
kon;
//trace(rnd);
}
} else {
kon = Math.floor(kon);
kon;
}
if ((mov ==3)&&(enemy.x > -400)&&(enemy.x < 400)) {
//enemy.x +=5;
kon=3;
if ((enemy.x==pos)||(enemy.z==pos)) {
AItembak=true;
kon = Math.floor(rnd);
kon;
//trace(rnd);
}
} else {
kon = Math.floor(kon);
kon;
}
if ((mov ==4)&&(enemy.z > -350)) {
//enemy.z -=5;
kon=4;
if ((enemy.x==pos)||(enemy.z==pos)) {
AItembak=true;
kon = Math.floor(rnd);
kon;
//trace(kon);
}
} else {
kon = Math.floor(kon);
kon;
}
if ((mov==1)||(mov==2)||(mov==3)||(mov==4)||(enemy.x==pos)||
(enemy.z==pos)||((enemy.z==object.z+10)||(enemy.x==object.x+10))) {
if (kon == 1) {
enemy.rotationY = 270;
enemy.x -=5;
mov=1;
} else if (kon ==2) {
enemy.rotationY = 0;
enemy.z +=5;
mov=2;
} else if (kon ==3) {
enemy.rotationY = -270;
enemy.x +=5;
mov=3;
} else if (kon==4) {
enemy.rotationY = 180;
enemy.z -=5;
mov=4;
}
//fungsi AI tembak
if (AItembak==true) {
peluruAI.visible= true;
peluruAI.x = enemy.x;
peluruAI.z = enemy.z;
if (mov==1) {
peluruAI.x = enemy.x;
peluruAI.z = enemy.z;
//peluruAI.x -=(getTimer() / 100)*5;
//peluruAI.x -=(getTimer() / 100)*5;
if
((peluruAI.x==object.x)&&(peluruAI.z==object.z)) {
object.visible=false;
}
} else if (mov==2) {
peluruAI.x = enemy.x;
peluruAI.z = enemy.z;
if
((peluruAI.x==object.x)&&(peluruAI.z==object.z)) {
object.visible=false;
}
//peluruAI.z +=(getTimer() / 100)*5;
//sphere.handle.z +=5;
} else if (mov==3) {
peluruAI.x = enemy.x;
peluruAI.z = enemy.z;
if
((peluruAI.x==object.x)&&(peluruAI.z==object.z)) {
object.visible=false;
}
//peluruAI.x +=(getTimer() / 100)*5;
//peluruAI.handle.x +=5;
} else if (mov==4) {
peluruAI.x = enemy.x;
peluruAI.z = enemy.z;
if
((peluruAI.x==object.x)&&(peluruAI.z==object.z)) {
object.visible=false;
}
}//peluruAI.z -=(getTimer() / 100)*5;
}//peluruAI.handle.z -=5;
}
//AI.2
posrnd2=Math.round((Math.sin(rnd)*30))*10;
pos2 = posrnd2;
//trace(pos2);
if ((mov2 ==2)&&(enemy2.z < 420)) {
//enemy.z +=5;
kon2=2;
if ((enemy2.x==pos2)||(enemy2.z==pos2)) {
kon2 = Math.floor(rnd2);
kon2;
//trace(rnd);
}
} else {
kon2 = Math.floor(rnd2);
}
if ((mov2==1)&&(enemy2.x > -400)&&(enemy2.x < 400)) {
//enemy.x -= 5;
kon2=1;
if ((enemy2.x==pos2)||(enemy2.z==pos2)) {
kon2 = Math.floor(rnd2);
kon2;
//trace(rnd);
}
} else {
kon2 = Math.floor(kon2);
kon2;
}
if ((mov2 ==3)&&(enemy2.x > -400)&&(enemy2.x < 400)) {
//enemy.x +=5;
kon=3;
if ((enemy2.x==pos2)||(enemy2.z==pos2)) {
kon2 = Math.floor(rnd2);
kon2;
//trace(rnd);
}
} else {
kon2 = Math.floor(kon2);
kon2;
}
if ((mov2 ==4)&&(enemy2.z > -350)) {
//enemy.z -=5;
kon2=4;
if ((enemy2.x==pos2)||(enemy2.z==pos2)) {
kon2 = Math.floor(rnd2);
kon2;
//trace(kon);
}
} else {
kon2 = Math.floor(kon2);
kon2;
}
if
((mov2==1)||(mov2==2)||(mov2==3)||(mov2==4)||(enemy2.x==pos2)||
(enemy2.z==pos2)) {
if (kon2 == 1) {
enemy2.rotationY = 270;
enemy2.x -=5;
mov2=1;
} else if (kon2 ==2) {
enemy2.rotationY = 0;
enemy2.z +=5;
mov2=2;
} else if (kon2 ==3) {
enemy2.rotationY = -270;
enemy2.x +=5;
mov2=3;
} else if (kon2==4) {
enemy2.rotationY = 180;
enemy2.z -=5;
mov2=4;
}
}
}
// handler keyboard
stage.addEventListener(KeyboardEvent.KEY_DOWN, onKeyDownEvent);
tembak = false;
AItembak = false;
moves = true;
if ((object.rotationY == 360) || (object.rotationY == -360) ||
(object.rotationY == 0)) {
object.rotationY = 0;
movP=1;
} else if ((object.rotationY == 90) || (object.rotationY == -270)) {
movP=2;
} else if ((object.rotationY == 180) || (object.rotationY == -180)) {
movP=3;
} else if ((object.rotationY == 270) || (object.rotationY == -90)) {
movP=4;
}
// rerender viewport on each frame
view.render();
}
var hit:MovieClip = new MovieClip();
hit.graphics.beginFill(0xFF0000);
hit.graphics.drawRect(0, 0, 500, 500);
hit.graphics.endFill();
addChild(hit);
hit.alpha = 0;
hit.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler);
function mouseDownHandler(evt:MouseEvent):void {
rotCamera = true;
}
hit.addEventListener(MouseEvent.MOUSE_UP, mouseUpHandler);
function mouseUpHandler(evt:MouseEvent):void {
rotCamera = false;
firstClick = true;
}
hit.addEventListener(MouseEvent.MOUSE_WHEEL, onMouseEvent);
function onMouseEvent(event:MouseEvent):void {
trace(camera.zoom);
var dir = (event.delta > 0) ? .5 : -.5;
camera.zoom = Math.max(2, Math.min(8, (camera.zoom+dir)));
//camera.distanceTo(-40);
}