Dans cet article, nous allons voir comment récupérer les coordonnées 2D (x et y) d’une Plane dans Papervision, grâce à la propriété autoCalcScreenCoords.
Pour cet exercice nous allons créer une Plane et un rectangle 2D, ce dernier ira récupérer les coordonnées 2D de notre Plane pour se positionner en son centre, ceci étant la méthode la plus facile.
Nous créons notre Plane (lignes 21-25) et passons la propriété autoCalcScreenCoords de cette dernière à true (ligne 27), cette propriété nous permet d’activer la possibilité de récupérer les coordonnées 2D de notre Plane.
Puis nous créons notre rectangle 2D un Sprite (lignes 31-34) qui sera positionné au centre de la Plane, vous pourrez noter que à la création du rectangle (ligne 34) nous le centrons en lui même.
A partir de là dans notre fonction onRenderTick (ligne 37) nous déplaçons notre Plane en x et en y (lignes 39-40) pour voir le déplacement de notre Sprite que nous bougeons (lignes 42-43) grâce à la formule pour l’axe X par exemple :
centerSprite.x = ( plane.screen.x + (this.width / 2 ) );
Vous remarquez qu’au lieu de faire plane.x nous rajoutons la propriété screen qui permet d’obtenir la coordonnée X de la Plane sur le plan 2D et nous ajoutons à cette dernière, le centre de notre classe BasicScene grâce à la formule, largeur de notre classe (this.width this faisant référence à notre classe BasicScene) divisé par deux.
Il ne nous reste plus qu’à faire la même manipulation pour l’axe Y en remplaçant :
centerSprite.y = ( plane.screen.y + (this.height/ 2 ) );
-
package {
-
import org.papervision3d.materials.ColorMaterial;
-
import org.papervision3d.objects.DisplayObject3D;
-
import org.papervision3d.objects.primitives.Plane;
-
import org.papervision3d.view.BasicView;
-
-
import flash.display.Sprite;
-
import flash.events.Event;
-
-
public class BasicScene extends BasicView {
-
-
public function BasicScene()
-
{
-
centerPlane();
-
-
startRendering();
-
}
-
-
private function centerPlane() : void
-
{
-
var mt : ColorMaterial = new ColorMaterial(0x0000ff);
-
-
plane = new Plane(mt, 80, 80);
-
scene.addChild(plane);
-
plane.z = ( camera.zoom * camera.focus ) – Math.abs (camera.z);
-
-
plane.autoCalcScreenCoords = true;
-
-
//—-
-
-
centerSprite = new Sprite();
-
centerSprite.graphics.beginFill(0xff0000, 0.2);
-
centerSprite.graphics.drawRect(-20, -20, 40, 40);
-
addChild(centerSprite);
-
}
-
-
override protected function onRenderTick(event:Event=null):void
-
{
-
plane.x += 0.2;
-
plane.y += 1;
-
//—-
-
centerSprite.x = ( plane.screen.x + (this.width / 2 ) );
-
centerSprite.y = ( plane.screen.y + (this.height / 2 ) );
-
//—-
-
super.onRenderTick(event);
-
}
-
-
private var plane : Plane;
-
private var centerSprite : Sprite;
-
}
-
}



