forked from: 【解決しました】3D で警告が出る
開発環境で警告が出る。
* wonderfl では出てないみたい。
* 僕だけなのかな。
* 開発環境:FlexSDK(3.2.0) + FlashDevelop
*
* 警告 : 3D DisplayObject はレンダリングされません。
* 描画するにはサイズ (6328, 6461) が大きすぎます。
*
* --
* 画面外のオブジェクトを描画対象から外すことで解決しました。
* ひとつひとつどの位置にあるのかは、ちゃんと見とかないとダメなんですね。
*
// forked from seyself's 3D で警告が出る
/**
* 開発環境で警告が出る。
* wonderfl では出てないみたい。
* 僕だけなのかな。
* 開発環境:FlexSDK(3.2.0) + FlashDevelop
*
* 警告 : 3D DisplayObject はレンダリングされません。
* 描画するにはサイズ (6328, 6461) が大きすぎます。
*
* --
* 画面外のオブジェクトを描画対象から外すことで解決しました。
* ひとつひとつどの位置にあるのかは、ちゃんと見とかないとダメなんですね。
*
*/
package {
import flash.display.*;
import flash.events.*;
import flash.filters.*;
import flash.geom.*;
import flash.utils.*;
public class FlashTest extends Sprite {
private var sprite:Sprite = new Sprite();
private var items:Vector.<Sprite> = new Vector.<Sprite>();
public function FlashTest()
{
loaderInfo.addEventListener("init", loaderInfoInitHandler);
}
private function setup():void
{
addChild(sprite);
var n:uint = 100;
for (var i:uint = 0; i < n; i++)
{
items.push(createRect());
}
sprite.x = 300;
sprite.y = 200;
}
private function createRect():Sprite
{
var rect:Sprite = new Sprite();
var h:Number = 100;
var w:Number = 100;
rect.graphics.beginFill(0xFF0000);
rect.graphics.drawRect( -w/2, -h/2, w, h);
rect.graphics.endFill();
rect.x = Math.random() * 3000 - 1500;
rect.y = Math.random() * 3000 - 1500;
rect.z = Math.random() * 3000 - 1500;
return rect;
}
private function loop():void
{
sprite.rotationY += 2;
var rect:Rectangle = new Rectangle(0,0,600,400);
var pers:PerspectiveProjection = root.transform.perspectiveProjection;
var vz:Number = pers.focalLength;
var n:uint = items.length;
for (var i:uint = 0; i < n; i++)
{
var mc:DisplayObject = items[i];
var vec:Vector3D = new Vector3D(mc.x, mc.y, mc.z);
var pt:Point = sprite.local3DToGlobal(vec);
if (rect.containsPoint(pt) && !mc.parent)
{
sprite.addChild(mc);
}
if (!rect.containsPoint(pt) && mc.parent)
{
sprite.removeChild(mc);
}
var bounds:Rectangle = mc.getBounds(sprite);
if (mc.parent && bounds.width * bounds.height > 0x7FFFFF)
{
sprite.removeChild(mc);
}
}
}
private function loaderInfoInitHandler(event:Event):void
{
loaderInfo.removeEventListener("init", loaderInfoInitHandler);
setup();
addEventListener("enterFrame", enterFrameHandler);
}
private function enterFrameHandler(event:Event):void
{
loop();
}
}
}