Jump to content
Korean Random
GPCracker

Вывод логов ActionScript, создание ангарных флеш-интерфейсов.

Recommended Posts

1. Как сделать вывод всех ошибок ActionScript в лог питона... Или куда еще. Такое ощущение, как будто вывод где-то лочится. Через методы DebugUtils ничего вывести не получается. Не, можно конечно поднять DAAPI и передавать данные через него, но это не решение для отладки ошибок, возникающих в AS-классах WG. Отловленные ошибки в картошкинских классах передаются через DebugUtils.LOG_***(), но этот вывод куда-то про*****. Если я задаю какие-то элементарные вопросы, прошу не закидывать помидорами и всем, что попадется под руку, ибо я во флешках только пытаюсь разобраться.

 

2. Никак не получается заюзать ВГ-шный класс (ScrollPane и производные) и создать scroll-область в окне. Базовые элементы (чекбокс, пока с ним играюсь) создаются нормально. Сыплется на валидации, если ее пропустить, все равно нормально не отображается.

TypeError: Error #1009: Cannot access a property or method of a null object reference.
	at scaleform.clik.core::UIComponent/configUI()
	at scaleform.clik.core::UIComponent/validateNow()
 	at scaleform.clik.utils::Constraints/update()
 	at scaleform.clik.core::UIComponent/draw()
 	at scaleform.clik.core::UIComponent/validateNow()
import net.wg.gui.components.controls.ResizableScrollPane;
...
this.testScrollPane = new ResizableScrollPane();
this.testScrollPane.width = 500;
this.testScrollPane.height = 300;
this.testScrollPane.x = 0;
this.testScrollPane.y = 0;
this.testScrollPane.scrollBar = "ScrollBar";
this.testScrollPane.target = this.testUIComponent;

this.testScrollPane.validateNow();
Только вот в отличие от питона, тут хрен разберешься, что и где крашится... Может кто сталкивался с аналогичной проблемой?

 

З.Ы. У картофана во всех UI-классах нахожу только определение переменных нужного типа (базовые элементы GUI), но никаких конструкторов и установок координат/размеров нет... Куда они это все попрятали? Интересно, как они сами это все рисуют...

Edited by GPCracker

Share this post


Link to post

Short link
Share on other sites

1. Как сделать вывод всех ошибок ActionScript в лог питона... Или куда еще. Такое ощущение, как будто вывод где-то лочится. Через методы DebugUtils ничего вывести не получается. Не, можно конечно поднять DAAPI и передавать данные через него, но это не решение для отладки ошибок, возникающих в AS-классах WG. Отловленные ошибки в картошкинских классах передаются через DebugUtils.LOG_***(), но этот вывод куда-то про*****. Если я задаю какие-то элементарные вопросы, прошу не закидывать помидорами и всем, что попадется под руку, ибо я во флешках только пытаюсь разобраться.

странно...

import net.wg.gui.components.controls.ResizableScrollPane;
...
this.testScrollPane = new ResizableScrollPane();
this.testScrollPane.width = 500;
this.testScrollPane.height = 300;
this.testScrollPane.x = 0;
this.testScrollPane.y = 0;
this.testScrollPane.scrollBar = "ScrollBar";
this.testScrollPane.target = this.testUIComponent;

this.testScrollPane.validateNow();

А можно больше кода?

З.Ы. У картофана во всех UI-классах нахожу только определение переменных нужного типа (базовые элементы GUI), но никаких конструкторов и установок координат/размеров нет... Куда они это все попрятали? Интересно, как они сами это все рисуют...

А где вы находите эти UI классы? В Application.swf?

Edited by ShadowHunterRUS

Share this post


Link to post

Short link
Share on other sites

DebugUtils.LOG_*** норм работает. Какие у вас моды?

Много чего стоит... Надо будет на чистом клиенте попробовать. Раньше, в 0.9.7, логи норм выводились, в 0.9.8.1 куда-то пропали...

А зачем вы юзаете картошкинские файлы AS? Можно же заоверрайдить их через флешку, которая подгружается из питона

Заоверрайдить можно все, но я не горю желанием писать костыли и велосипеды... Заюзать готовый скрипт как-то интереснее будет.

То, что я приложил как лог, это захвачено через try-catch, передано через DAAPI и выведено питоном) Но отлаживать так все не получится. Тем более что неотловленные ошибки почему-то тоже теряются, раньше вываливались в лог...

А можно больше кода?

"Да не вопрос)"

package
{
	import flash.events.*;
	import flash.display.*;
	import scaleform.clik.core.UIComponent;
	import net.wg.infrastructure.base.AbstractWindowView;
	import net.wg.gui.components.controls.SoundButton;
	import net.wg.gui.components.controls.CheckBox;
	import net.wg.gui.components.advanced.FieldSet;
	import net.wg.gui.components.controls.ScrollBar;
	import net.wg.gui.components.controls.ResizableScrollPane;
	
	public class TestWindow extends AbstractWindowView
	{
		public var testSoundButton:SoundButton;
		public var testCheckBox:CheckBox;
		public var testFieldSet:FieldSet;
		public var testUIComponent:UIComponent;
		public var testScrollPane:ResizableScrollPane;
		
		public function TestWindow()
		{
			super();
            this.canClose = true;
            return;
		}
		
		override protected function configUI() : void
		{
			super.configUI();
			
			this.testSoundButton = App.utils.classFactory.getComponent("ButtonNormal", SoundButton);
			this.testSoundButton.width = 100;
			this.testSoundButton.x = 300;
			this.testSoundButton.y = 379;
			this.testSoundButton.label = "Test";
			this.testSoundButton.validateNow();
			this.testSoundButton.addEventListener(MouseEvent.CLICK, this.onTestBtnClick, false, 0, true);
			
			this.addChild(this.testSoundButton);
			
			this.testCheckBox = App.utils.classFactory.getComponent("CheckBox", CheckBox);
			this.testCheckBox.x = 25;
			this.testCheckBox.y = 25;
			this.testCheckBox.label = "Fucking test checkBox!";
			this.testCheckBox.validateNow();
			this.testCheckBox.width = this.testCheckBox.textField.textWidth + 25;
			
			this.testFieldSet = App.utils.classFactory.getComponent("FieldSet", FieldSet);
			this.testFieldSet.textField.htmlText = "<b><font color='#FF00FF'>The fucking FieldSet!!!</font></b>";
			this.testFieldSet.width = 400;
			this.testFieldSet.height = 200;
			this.testFieldSet.textField.width = this.testFieldSet.width;
			this.testFieldSet.x = 0;
			this.testFieldSet.y = 0;
			this.testFieldSet.validateNow();
			
			this.testFieldSet.addChild(this.testCheckBox);
			
			try
			{
				this.testUIComponent = new UIComponent();
				this.width = 500;
				this.height = 500;
				this.testUIComponent.validateNow();
				
				this.testScrollPane = App.utils.classFactory.getComponent("ResizableScrollPane", ResizableScrollPane);
				this.py_logError("this.testScrollPane" + String(this.testScrollPane));
				//this.testScrollPane = new ResizableScrollPane();
				this.testScrollPane.width = 500;
				this.testScrollPane.height = 300;
				this.testScrollPane.x = 0;
				this.testScrollPane.y = 0;
				this.testScrollPane.scrollBar = "ScrollBar";
				this.testScrollPane.target = this.testUIComponent;
				try
				{
					this.testScrollPane.validateNow();
				}
				catch(err:Error)
				{
					this.py_logError(err.getStackTrace());
				}
				this.py_logError(String(this.testScrollPane.scrollBar));
				this.py_logError(String(this.testScrollPane.target));
				this.py_logError(String(this.testScrollPane));
				
				this.testUIComponent.addChild(this.testFieldSet);
				this.addChild(this.testScrollPane);
			}
			catch(err:Error)
			{
				this.py_logError(err.getStackTrace());
			}
			
			return;
		}
		
		override protected function onPopulate() : void
		{
			this.width = 600;
            this.height = 400;
			if (this.window)
            {
				window.title = "Fucking test window!";
                window.useBottomBtns = true;
			}
			
			super.onPopulate();
			return;
		}
		
		private function onTestBtnClick(event:MouseEvent) : void
		{
			this.testCheckBox.selected = !this.testCheckBox.selected;
			this.testSoundButton.label = String(this.py_as2py(1, 2, 3));
			return;
		}
		
		public var py_as2py:Function;
		public var py_logError:Function;
		
		public function as_py2as(arg1:Number, arg2:Number) : String
		{
			return String(arg1 + arg2)
		}
	}
}

И где addChild?

Все есть. Просто контрол сыплется на валидации...

var testScrollPane: ResizableScrollPane = new ResizableScrollPane();

переменная определена как атрибут

А где вы находите эти UI классы? В Application.swf?

декомпилирую lobby.swf. Это по сути и есть Application.swf.

Кстати в xfw собираются улучшить ситуацию с контроллами?

Не знаю, не мониторю этот раздел.

 

Хммм. А разрабы нехило перекопали python scripts/common/debug_utils.py в последних патчах...

Edited by GPCracker

Share this post


Link to post

Short link
Share on other sites

this.testScrollPane = App.utils.classFactory.getComponent("ResizableScrollPane", ResizableScrollPane);

this.testScrollPane.width = 500;

this.testScrollPane.height = 300;

this.testScrollPane.x = 0;

this.testScrollPane.y = 0;

this.testScrollPane.scrollBar = "ScrollBar";

this.testScrollPane.target = this.testUIComponent;

try

{

     this.testScrollPane.validateNow();

 }

    catch(err:Error)

 {

     this.py_logError(err.getStackTrace());

}

 

но никаких конструкторов и установок координат/размеров нет... Куда они это все попрятали?

this.testScrollPane = (this as UIComponent).addChild(App.utils.classFactory.getComponent("ResizableScrollPane", ResizableScrollPane, {
width: 500,
height: 300,
x: 0,
y: 0,
scrollBar: "ScrollBar"})) as ResizableScrollPane;
try
{
     this.testScrollPane.validateNow();
}
    catch(err:Error)
{
     DebugUtils.LOG_DEBUG(err.message);
     DebugUtils.LOG_DEBUG(err.getStackTrace());
}

Так вроде тоже можно...

 

Хммм. А разрабы нехило перекопали python scripts/common/debug_utils.py в последних патчах...

http://www.koreanrandom.com/forum/topic/15280-pjorion-редактирование-компиляция-декомпиляция-обф/?p=263752

Edited by ShadowHunterRUS

Share this post


Link to post

Short link
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...