Показать сообщение отдельно
Старый 24.04.2012, 09:43
Srednas вне форума Посмотреть профиль Отправить личное сообщение для Srednas Найти все сообщения от Srednas
  № 7  
Ответить с цитированием
Srednas

Регистрация: Nov 2010
Сообщений: 430
Цитата:
Сообщение от 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;
		}
	}
__________________
Лучше спросить и выставить себя дураком на пять минут, чем не спросить и остаться дураком на всю жизнь.