Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 06.11.2013, 19:24
Digital вне форума Посмотреть профиль Отправить личное сообщение для Digital Найти все сообщения от Digital
  № 21  
Ответить с цитированием
Digital

Регистрация: Apr 2012
Сообщений: 213
Хм, заменил на числовые значения, но не строит теперь!) Хотя и ошибок не выдаёт)

Добавлено через 14 минут
ArgumentError: Error #1063: Несоответствие количества аргументов в ua::PlaneObj/initCameraControll(). Ожидалось 0, получено 1.
Теперь это =(

Добавлено через 25 часов 43 минуты
Ладно, всем спасибо, постараюсь дальше сам разобраться

Старый 14.11.2013, 15:19
Digital вне форума Посмотреть профиль Отправить личное сообщение для Digital Найти все сообщения от Digital
  № 22  
Ответить с цитированием
Digital

Регистрация: Apr 2012
Сообщений: 213
Я в отчаянии =( Никакие костыли не работают! Как ещё можно обратиться к stage не из класса?

Старый 14.11.2013, 15:37
Akopalipsis вне форума Посмотреть профиль Найти все сообщения от Akopalipsis
  № 23  
Ответить с цитированием
Akopalipsis
Banned
[+4 24.02.14]
[+4 07.11.13]
[+ 13.03.14]

Регистрация: Mar 2013
Сообщений: 1,864
Сделайте в классе в котором нужно обратится к сцене статический метод со сценой в параметрах.
В главном классе, до создания экземпляра нужного Вам класса, передайте сцену в статический метод.
И получится так, что при создании экземпляра, в конструкторе уже будет сцена.

Добавлено через 2 минуты
Код AS3:
package
{
	import flash.display.Sprite;
	import flash.events.Event;
 
	public class Main extends Sprite 
	{
 
		public function Main():void 
		{
			if (stage) init();
			else addEventListener(Event.ADDED_TO_STAGE, init);
		}
 
		private function init(e:Event = null):void 
		{
			removeEventListener(Event.ADDED_TO_STAGE, init);
			// entry point
 
			NeedStage.setStage(stage);
			var _neddStage:NeedStage = new NeedStage();
		}
 
	}
 
}
Код AS3:
package 
{
	import flash.display.Sprite;
	import flash.display.Stage;
 
	public class NeedStage extends Sprite 
	{
		private static var _stage:Stage;
 
		public function NeedStage() 
		{
			trace(_stage);
		}
		public static function setStage(stage:Stage):void
		{
			_stage = stage;
		}
 
	}
 
}

Старый 14.11.2013, 15:53
Digital вне форума Посмотреть профиль Отправить личное сообщение для Digital Найти все сообщения от Digital
  № 24  
Ответить с цитированием
Digital

Регистрация: Apr 2012
Сообщений: 213
Класс, в котором мне нужно обратиться к сцене расширяет не спрайт, а бейсик вью + главній класс не может расширять спрайт - выдаёт ошибку... У меня главный клас расширяет Мувиклип

Старый 14.11.2013, 16:00
Akopalipsis вне форума Посмотреть профиль Найти все сообщения от Akopalipsis
  № 25  
Ответить с цитированием
Akopalipsis
Banned
[+4 24.02.14]
[+4 07.11.13]
[+ 13.03.14]

Регистрация: Mar 2013
Сообщений: 1,864
Не имеет значения, в какой класс передавать сцену.

Старый 14.11.2013, 16:08
Digital вне форума Посмотреть профиль Отправить личное сообщение для Digital Найти все сообщения от Digital
  № 26  
Ответить с цитированием
Digital

Регистрация: Apr 2012
Сообщений: 213
Тоесть после этих функций, я смогу из класса NeedStage обращаться к сцене? Или из функции setStage?

Старый 14.11.2013, 16:13
Akopalipsis вне форума Посмотреть профиль Найти все сообщения от Akopalipsis
  № 27  
Ответить с цитированием
Akopalipsis
Banned
[+4 24.02.14]
[+4 07.11.13]
[+ 13.03.14]

Регистрация: Mar 2013
Сообщений: 1,864
Код AS3:
package  ua
{
	import org.papervision3d.cameras.SpringCamera3D;
	import org.papervision3d.core.math.Number3D;
import org.papervision3d.core.geom.renderables.Vertex3D;
	import org.papervision3d.core.geom.Lines3D;
	import flash.geom.Rectangle;
	import flash.events.Event;
	import org.papervision3d.cameras.CameraType;
	import org.papervision3d.events.InteractiveScene3DEvent;
import org.papervision3d.materials.special.LineMaterial;
	import org.papervision3d.materials.WireframeMaterial;
	import org.papervision3d.materials.ColorMaterial;
	import org.papervision3d.materials.special.CompositeMaterial;
 
	import org.papervision3d.objects.primitives.Plane;
	import org.papervision3d.objects.primitives.PaperPlane;
	import org.papervision3d.view.BasicView;
 
	import flash.events.KeyboardEvent;
	import flash.ui.Keyboard;
 
 
 
	public class PlaneObj extends BasicView
	{
                      private static var _stage:Stage;//!!!!!!!!!!!!!!!
 
		public var v0:Vertex3D;
		public var v1:Vertex3D;
 
		public var c0:Vertex3D;
		public var c1:Vertex3D;
 
		public var d0:Vertex3D;
		public var d1:Vertex3D;
 
		public var z0:Vertex3D;
		public var z1:Vertex3D;
		public var z2:Vertex3D;
		public var z3:Vertex3D;
		 public var lm:LineMaterial = new LineMaterial(0x000000);
		public var paperPlane:PaperPlane;
 
		private var keyRight:Boolean;
		private var keyLeft:Boolean;
		private var keyForward:Boolean;
		private var keyBackward:Boolean;
		public var speed:Number=30
		private var KeyFall:Boolean;
		private var KeyFly:Boolean;
			private var nitro:Boolean;
 
		public function PlaneObj ()
		{
			super(_stage.stageWidth,_stage.stageHeight/*//!!!!!!!!!!!!!!!*/,true,false,CameraType.SPRING);
 
			initCameraControll();
 
			var camera:SpringCamera3D = SpringCamera3D(camera);
			camera.mass = 20;
			camera.damping = 4;
			camera.stiffness = 1;
			camera.positionOffset = new Number3D(0,150,-500);
			camera.lookOffset = new Number3D(0,0,100);
 
			init ();
			startRendering ();
 
		}
                      public static function setStage(stage:Stage):void
		{
			_stage = stage;
		}
		private function initCameraControll():void
		{
			stage.addEventListener (KeyboardEvent.KEY_DOWN,keyDownHandler);
			stage.addEventListener (KeyboardEvent.KEY_UP,keyUpHandler);
		}
		private function keyDownHandler (e:KeyboardEvent):void
		{
			switch ( e.keyCode )
			{
				case "W".charCodeAt() :
				case Keyboard.UP :
					keyForward = true;
					break;
				case "S".charCodeAt() :
				case Keyboard.DOWN :
					keyBackward = true;
					break;
				case "A".charCodeAt() :
				case Keyboard.LEFT :
					keyLeft = true;
					break;
				case "D".charCodeAt() :
 
				case Keyboard.RIGHT :
					keyRight = true;
					break;
 
				case "T".charCodeAt() :
					KeyFly = true
					break;
 
				case "G".charCodeAt() :
					KeyFall = true
					break;
					case "Z".charCodeAt() :
					nitro = true
					break;
			}
		}
		private function keyUpHandler (e:KeyboardEvent):void
		{
			switch (e.keyCode)
			{
				case "W".charCodeAt() :
				case Keyboard.UP :
					keyForward = false;
					break;
				case "S".charCodeAt() :
				case Keyboard.DOWN :
					keyBackward = false;
					break;
				case "A".charCodeAt() :
				case Keyboard.LEFT :
					keyLeft = false;
					break;
				case "D".charCodeAt() :
				case Keyboard.RIGHT :
					keyRight = false;
					break;
 
				case "T".charCodeAt() :
					KeyFly = false
					break;
 
				case "G".charCodeAt() :
					KeyFall = false
					break;	
				case "Z".charCodeAt() :
					nitro = false
					break;		
			}
		}
		private function init ():void
		{
			viewport.interactive = true;
v0 = new Vertex3D(0,550,0);
		v1 = new Vertex3D(0,-550,0);
		c0 = new Vertex3D(550,0,0);
		c1 = new Vertex3D(-550,0,0);
		d0 = new Vertex3D(0,0,550);
		d1 = new Vertex3D(0,0,-550);
			var lineN:Lines3D = new Lines3D(lm);
 
			lineN.addNewLine(2,v0.x,v0.y,v0.z,v1.x,v1.y,v1.z);
			lineN.addNewLine(2,c0.x,c0.y,c0.z,c1.x,c1.y,c1.z);
			lineN.addNewLine(2,d0.x,d0.y,d0.z,d1.x,d1.y,d1.z);
scene.addChild(lineN);
startRendering();
 
			var planeMaterial:CompositeMaterial = new CompositeMaterial();
			planeMaterial.addMaterial (new ColorMaterial(0x00CC00));
			planeMaterial.addMaterial (new WireframeMaterial(0x484848));
			planeMaterial.doubleSided = true;
 
			paperPlane = new PaperPlane(planeMaterial);
			scene.addChild (paperPlane);
			paperPlane.y = 250;
			paperPlane.z = -1000;
 
			camera.z = -1500;
			camera.target = paperPlane;
		}
		private function moveObject ():void
		{
			if (keyForward)
			{
				paperPlane.moveForward (speed);
				//camera.moveForward (30);
			}
			else if (keyBackward)
			{
				paperPlane.moveBackward (speed);
				//camera.moveBackward (30);
			}
			if (keyRight)
			{
				paperPlane.localRotationY -= 2;
				//camera.localRotationY -= 2;
			}
			else if (keyLeft)
			{
				paperPlane.localRotationY += 2;
				//camera.localRotationY += 2;
			}
			if(KeyFly){
				paperPlane.y += 10;
			}
			else if(KeyFall){
				paperPlane.y -=10
			}
			if(nitro){
				speed = 100
			}
			else{
				speed = 30
			}
		}
		private function doInteractions (e:InteractiveScene3DEvent):void
		{
			camera.target=e.displayObject3D;
		}
 
		override protected function onRenderTick (event:Event = null):void
		{
			moveObject();
			super.onRenderTick ();
		}
	}
}

Старый 14.11.2013, 16:14
Digital вне форума Посмотреть профиль Отправить личное сообщение для Digital Найти все сообщения от Digital
  № 28  
Ответить с цитированием
Digital

Регистрация: Apr 2012
Сообщений: 213
А слушатели событий в private function initCameraControll():void тоже менять?)

Добавлено через 2 минуты
Даже если их поиенять(и добавить импорт сцены) - всё равно не рисует с TypeError: Error #1009, что-то не так...

Старый 14.11.2013, 16:18
Akopalipsis вне форума Посмотреть профиль Найти все сообщения от Akopalipsis
  № 29  
Ответить с цитированием
Akopalipsis
Banned
[+4 24.02.14]
[+4 07.11.13]
[+ 13.03.14]

Регистрация: Mar 2013
Сообщений: 1,864
Конечно, раз Вы уже притащили в класс ссылку, то почему бы ей во всех случаях и не пользоваться.

Старый 14.11.2013, 19:52
Digital вне форума Посмотреть профиль Отправить личное сообщение для Digital Найти все сообщения от Digital
  № 30  
Ответить с цитированием
Digital

Регистрация: Apr 2012
Сообщений: 213
И Тем не менее ошибка... Вот основной класс
Код AS3:
package 
{
	import ua.PlaneObj;
	import fl.controls.TextArea; 
import flash.events.MouseEvent;
import flash.events.Event;
	import flash.display.MovieClip;
	import flash.utils.Timer;
	import flash.events.TimerEvent;
	import flash.display.*;
	import flash.display.Sprite;
	import flash.events.Event;
	public class AddButton extends Sprite
	{
 
 
 public var k:Number = 1
		 public var vx1:Number;
		  public var vy1:Number;
		 public var vz1:Number;
		 public var vx2:Number;
		 public var vy2:Number;
		 public var vz2:Number;
		  public var vx3:Number;
		  public var vy3:Number;
		 public var vz3:Number;
		 public var vx4:Number;
		 public var vy4:Number;
		 public var vz4:Number;
 
 
		 private var _timer:Timer;
		public function AddButton()
		{
			var vectorS:PlaneObj = new PlaneObj() ;
			trace(stage.stageHeight)
			trace(stage.stageWidth)
			addChild(vectorS);
 
 
			 var bt_start:MovieClip = new btn
			 var bt_sutr:MovieClip = new btn_st
			var bt_supa:MovieClip = new btn_sp
			 var bt_ratr:MovieClip = new btn_rt
			 var fon:MovieClip = new RAMKA
addChild(bt_start)
addChild(bt_sutr)
addChild(bt_ratr)
addChild(bt_supa)
//addChild(fon)
bt_start.x = 50
bt_start.y= 300
bt_sutr.x = 150
bt_sutr.y= 300
bt_supa.x = 300
bt_supa.y = 300
bt_ratr.x = 500
bt_ratr.y = 300
if (stage) init();
			else addEventListener(Event.ADDED_TO_STAGE, init);
 
 
	}
 
			private function init(e:Event = null):void 
		{
			removeEventListener(Event.ADDED_TO_STAGE, init);
 
 
			PlaneObj.setStage(stage);
			var _neddStage:PlaneObj = new PlaneObj();
		}
}
}

Создать новую тему Ответ Часовой пояс GMT +4, время: 09:33.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 09:33.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.