UIコンポーネント:2つのクラス - 1つのクラスはもう1つのクラスを描画しません(flex/as)
-
25-10-2019 - |
質問
私は、メインMXMLファイルとグラフィックを描く2つのActionScriptクラスを備えたFlexプロジェクトで作業しています。たくさんの記事や投稿を読んでから、私は彼らがuicomponentを拡張しなければならないことを発見しました。最初のActionScriptクラスは、画像を正常に描画します。最初のクラスは、新しいオブジェクトを作成するための呼び出しを行います。 2番目のオブジェクトは表示されません。 Pure ActionScriptバージョンでは、セカンドクラスが描画するための参照としてステージを渡さなければなりませんでした。
また、StackoverFlowで同様の質問を見つけました。UIComponent拡張クラスは、UIComponent拡張クラスを表示しません. 。しかし、私の例にそれを適用する方法がわかりませんでした。
2番目のオブジェクトが表示されるために、UIComponentメソッドを過剰に構成する必要がある場合、どちらですか?この例でそれらをどのように実装する必要がありますか?
この問題に対するより良いまたはより単純な答えがある場合、それも高く評価されています。これは、私がより複雑なプロジェクトで抱えている問題の単純化された例です。
// First class "Ball" draws a circle successfully then creates a second object "MyRect"
package dr {
import flash.display.*;
import flash.display.Sprite;
import mx.core.*;
public class Ball extends UIComponent {
public function Ball()
{
var vCircle:Sprite = new Sprite();
vCircle.graphics.beginFill(0xff0000);
vCircle.graphics.drawCircle(100, 150, 40);
vCircle.graphics.endFill();
addChild(vCircle);
var rect:MyRect = new MyRect();
}
}
}
// Second class "MyRect" (does not display)
package dr {
import flash.display.*;
import flash.display.Sprite;
import flash.events.*;
import flash.geom.*;
import mx.core.*;
public class MyRect extends UIComponent
{
public function MyRect()
{
var vRect:Sprite = new Sprite();
vRect.graphics.beginFill(0x0000ff, 1);
vRect.graphics.drawRect(300, 150, 150, 75);
addChild(vRect);
//var ui:UIComponent = new UIComponent();
//addChild(ui);
//ui.addChild(vRect);
//UpdateDisplayList();
}
}
}
//Here is the MXML main file:
<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx"
xmlns:dr="dr.*"
minWidth="955" minHeight="600">
<fx:Declarations>
<!-- Place non-visual elements (e.g., services, value objects) here -->
</fx:Declarations>
<mx:Panel id="myPanel" width="700" height="600" paddingLeft="10" paddingTop="10">
<dr:Ball></dr:Ball>
</mx:Panel>
</s:Application>
解決
ボールクラスでは、新しいmyRectクラスをインスタンス化します。ただし、ステージに追加しません。
var rect:MyRect = new MyRect();
addChild(rect);
他のヒント
vRect.graphics.endFill();
不足している。
所属していません StackOverflow