Цитата:
Сообщение от bublic_bicubic
а можете выложить исходник аномальной флешки или ее части?
|
Он большой, но простой:
(для чего флешка: чтобы проверить работает ли передача/прием данных там, куда будет флешка вставлена, например, вставленная в программу на Delphi, и поддерживается ли 3д)

Код AS3:
public class P7compatibility extends Sprite
{
private var t2:TextField = new TextField();
private var camera:Camera3D;
private var rootContainer:Object3D;
private var box:Box;
private var stage3D:Stage3D;
private var ibox:WireFrame;
private var cubeContainer:Object3D;
public function P7compatibility()
{
super();
stage.scaleMode = StageScaleMode.NO_SCALE;
stage.align = StageAlign.TOP_LEFT;
draw();
}
private function draw():void{
// «кнопка» (текстфилд в спрайте)
var t1:TextField = new TextField();
t1.text = "Отправить данные";
t1.width = t1.textWidth+3;
t1.height = t1.textHeight+3;
t1.selectable = false;
var s1:Sprite = new Sprite();
s1.graphics.lineStyle(1, 0xcccccc, 1, true);
s1.graphics.beginFill(0xffffff);
s1.graphics.drawRect(0, 0, t1.textWidth+3, t1.textHeight+3);
s1.addChild(t1);
addChild(s1);
s1.x = 10;
s1.y = 10;
s1.addEventListener(MouseEvent.ROLL_OVER, setHandCursor);
s1.addEventListener(MouseEvent.ROLL_OUT, setArrowCursor);
s1.addEventListener(MouseEvent.CLICK, sendToExternalContainer);
// текстфилд
t2.text = "Принятые данные:";
addChild(t2);
t2.x = s1.x;
t2.y = s1.y + s1.height + 10;
// слушатель вызова внешним кодом функции sendToFlash во флеше
ExternalInterface.addCallback("sendToFlash", receivedFromExternalContainer);
// текстфилд
var t3:TextField = new TextField();
t3.text = "Проверка 3D:";
t3.x = s1.x;
t3.y = t2.y + 50;
addChild(t3);
// блок для проверки поддержки 3д
stage3D = stage.stage3Ds[0];
camera = new Camera3D(10, 1000);
camera.z = 250;
camera.rotationY = -Math.PI;
// кнтейнеры для камеры и куба
rootContainer = new Object3D();
cubeContainer = new Object3D();
// куб
box = new Box()
box.setMaterialToAllSurfaces(new FillMaterial(0xCCCCCC, 0.99));
// ребра куба (куб только из ребер)
ibox = new WireFrame();
ibox = WireFrame.createEdges((box as Mesh), 0x000000, 1, 2);
// камера
camera.view = new View(150, 150, false, 0xFFFFFF, 1, 7);
camera.view.hideLogo();
camera.fov = Math.PI/3;
camera.view.x = s1.x;
camera.view.y = t3.y + t3.textHeight + 10;
// корневой контейнер содержит камеру и контейнер для куба
rootContainer.addChild(camera);
// контейнер куба содержит куб и ребра куба
cubeContainer.addChild(box);
cubeContainer.addChild(ibox);
rootContainer.addChild(cubeContainer);
addChild(camera.view);
// ждем создания контекста 3д
stage3D.addEventListener(Event.CONTEXT3D_CREATE, init);
stage3D.requestContext3D();
}
// реакция на создание контекста 3д
private function init(e:Event):void{
stage3D.removeEventListener(Event.CONTEXT3D_CREATE, init);
// загрузка ресурсов в контекст
for each (var resource:Resource in rootContainer.getResources(true)) {
resource.upload(stage3D.context3D);
}
// слушатель на энтерфрейм
this.addEventListener(Event.ENTER_FRAME, enterFrameHandler);
}
// слушатель на энтерфрейм
private function enterFrameHandler(e:Event):void{
// вращение куба
cubeContainer.rotationX += 0.01;
cubeContainer.rotationY += 0.05;
cubeContainer.rotationZ += 0.05;
camera.render(stage3D);
}
// изменение вида курсора
private function setHandCursor(e:MouseEvent):void{
Mouse.cursor = MouseCursor.BUTTON;
}
private function setArrowCursor(e:MouseEvent):void{
Mouse.cursor = MouseCursor.AUTO;
}
// посылает по клику во внешнюю функцию sendFromFlash строку
private function sendToExternalContainer(e:MouseEvent):void{
ExternalInterface.call("sendFromFlash", "Hello, Im flash");
}
// принимает строку из внешней функции sendToFlash
private function receivedFromExternalContainer(value:String):void{
t2.text = "Принятые данные: \n" + value;
}
}