Starling FAQの解決方法

13851 ワード

1、Androidデバイス上でユーザーが押した後に退く行為を阻止する
リスニングキーイベント
//      

view.stage.addEventListener(KeyboardEvent.KEY_UP,keyboardHandler);

/**

*        ,      

*/       

protected function keyboardHandler(event:KeyboardEvent):void

{

        if(event.keyCode == Keyboard.BACK)

        {

                event.preventDefault();

                event.stopPropagation();

                NativeApplication.nativeApplication.exit();

        }

}

2、プログラムを横にして、縦にしてはいけない.でも反転できる
まずXML設定でlandscapeモードを起動しないで、以下のように注釈すればいいです.
 
<!--<aspectRatio>landscape</aspectRatio>-->

次に、自動反転を許可するように開きます.
<autoOrients>true</autoOrients>

次に、アプリケーションが起動したら、コードで横画面モードに設定します.
stage.setOrientation(StageOrientation.ROTATED_LEFT);

次に、画面反転イベントをリスニングし、不要なモードをブロックします.
//only support landscape mode

stage.addEventListener(StageOrientationEvent.ORIENTATION_CHANGING, onOrientationChanging );

/**only support landscape mode*/

private function onOrientationChanging(event:StageOrientationEvent):void 

{

    // If the stage is about to move to an orientation we don't support, lets prevent it 

    // from changing to that stage orientation. 

    if(event.afterOrientation == StageOrientation.UPSIDE_DOWN || event.afterOrientation == StageOrientation.DEFAULT ) 

        event.preventDefault();

}

3、二つの携帯アプリはお互いに呼び出してもいいですか
Adobe AIRを使用してモバイルアプリケーションの開発を行う場合、もし私たちが2つのアプリケーション(AとB)を開発し、同時に携帯電話にインストールしていたら、Aの中でBを呼んでパラメータを伝えることができるかどうか(あるいは逆にBが操作した後、パラメータをAに返す)というニーズがあるかもしれません.
現在、AIRはアプリのAPIを直接呼んでいませんが、携帯電話特有の特性を使って実現することができます.ANEを用いて,オリジナルコードを用いて実現してもよいし,カスタムURIを用いて実現してもよい.詳細については、以下を参照してください.
Adobe AIR研究グループ:Adobe AIRモバイルAppの相互呼び出し実装方式
更新:Adobe AIR 3.5 betaにこの特性が原生的に追加されました
4、AIRモバイルアプリケーションのアイコンサイズに対する要求は何ですか?
答え:主に発表プラットフォームのアイコンのサイズに対する要求を見て、現在最も広く応用されているiOSとAndroidプラットフォームの要求を基準にして、私たちが準備すべき画像のサイズは:
  • Android: 24*24,32*32,36*36,48*48,72*72
  • iOS: 29*29,48*48,57*57,58*58,72*72,96*96,114*114,144*144,512*512

  • 5、AIR for iOSアプリケーションは最低システムバージョンをどのように限定するか
    答え:最新のiOSシステムでサポートされている機能を使用している場合は、条件に合わないシステムがアプリケーションをインストールして実行できないことを防止するために、アプリケーションに限定する必要があります.
    XML構成に追加する方法は、次のとおりです.
    <key>MinimumOSVersion</key>
    
    <string>5.0.1</string>

    6、Starlingでどのようにテクスチャを裁断するか
    Imageを通してsetTexCoords()法では、四角形頂点対のテクスチャのUV座標(値範囲0-1)を変更することができ、テクスチャの矩形領域の裁断を実現することができる.たとえば、テクスチャの右下の1/4の領域を表示するだけで、次のように設定できます.
    img.setTexCoords(0,new Point(0.5,0.5));
    
    img.setTexCoords(1,new Point(1,0.5));
    
    img.setTexCoords(2,new Point(0.5,1));
    
    img.setTexCoords(3,new Point(1,1));
    
     
    
    //TIPS: Starling             ,     4            :
    
    0 1
    
    2 3

    7、Starlingでどのように画像を並べますか?
    答:textureを設定する.repeatはtrueで、imageのUV座標を設定します.
    コードの例:
    var birdTex:Texture = Texture.fromBitmap(new birdBMPClass() as Bitmap);
    
    birdTex.repeat = true;
    
    var bird:Image = new Image(birdTex);
    
    bird.width = 960;
    
    bird.height = 640;
    
    bird.setTexCoords(1, new Point(bird.width/birdTex.width, 0));
    
    bird.setTexCoords(2, new Point(0, bird.height/birdTex.height));
    
    bird.setTexCoords(3, new Point(bird.width/birdTex.width, bird.height/birdTex.height));
    
    addChild(bird);

     
    8、複数のテクスチャを1つにまとめるにはどうすればいいですか?
    /**
    
     *            
    
     * @param target          
    
     * @param persistent                       
    
     * @return 
    
     */        
    
    public static function clone(target:DisplayObject, persistent:Boolean = false):Image
    
    {
    
        if (!target)
    
        {
    
            return null;
    
        }
    
        var texture:RenderTexture = new RenderTexture(target.width, target.height, persistent);
    
        if (target is DisplayObjectContainer)
    
        {
    
            texture.drawBundled(function():void
    
            {
    
                var num:int = DisplayObjectContainer(target).numChildren;
    
                for (var i:int = 0; i < num; i++)
    
                {
    
                    texture.draw(DisplayObjectContainer(target).getChildAt(i));
    
                }
    
            });
    
        }
    
        else
    
        {
    
            texture.draw(target);
    
        }
    
        return new Image(texture);
    
    }

     
    9、Starlingアプリケーションの拡大後、画像間のギャップをどのように解決しますか?
    答え:これはStage 3 Dのテクスチャサンプリング時のアルゴリズムによる可能性があります.
    方法1:TextureSmoothingを使用する.NONE.例:
    var image1:TestImage = new TestImage(sAssets.getTexture("test"));
    
    image1.smoothing = TextureSmoothing.NONE;

    方式2:画像表示領域のオフセット量を設定し、この問題を回避する:
    package
    
    {
    
        import starling.display.Image;
    
        import starling.textures.Texture;
    
        import flash.geom.Point;
    
        import flash.utils.setTimeout;
    
     
    
        /**
    
         *     ,       Image
    
         */    
    
        public class TestImage extends Image
    
        {
    
            public static var offset:Number = 0;
    
     
    
            public function TestImage(texture:Texture)
    
            {
    
                super(texture);
    
                if(offset>0)
    
                {
    
                    setPositions();
    
                }
    
            }
    
     
    
            private function setPositions():void
    
            {
    
                var w:Number = super.width+offset;
    
                var h:Number = super.height+offset;
    
                mVertexData.setPosition(0,0-offset,0-offset);
    
                mVertexData.setPosition(1,w,0-offset);
    
                mVertexData.setPosition(2,0-offset,h);
    
                mVertexData.setPosition(3,w,h);
    
            }
    
     
    
            /**@override*/
    
            override public function readjustSize():void
    
            {
    
                super.readjustSize();
    
                setPositions();
    
            }
    
            /**@override*/
    
            override public function setTexCoords(vertexID:int, coords:Point):void
    
            {
    
                super.setTexCoords(vertexID,coords);
    
                setPositions();
    
            }
    
            /**@override*/
    
            override public function set width(value:Number):void
    
            {
    
                super.width = value;
    
                setTimeout(setPositions,1);
    
            }
    
            /**@override*/
    
            override public function set height(value:Number):void
    
            {
    
                super.height = value;
    
                setTimeout(setPositions,1);
    
            }
    
     
    
        }
    
    }
    //   
    
    if(viewPort.width>stageWidth)
    
        TestImage.offset = 1;