0

Air で Android 用に作成したゲームに問題があります。テストしている電話をロックしてからロックを解除するまで、アプリは正しく(横向きのまま)向きを変えます。電話のロックが解除されると、アプリは縦向きモードになります (常に横向きにする必要があります)。

記述子 xml ファイルで、フルスクリーンを true に、アスペクト比を横向きに、自動方向を false に設定しましたが、これはロックおよびロック解除時にアプリに影響を与えないようです (他のシナリオでは完全に機能します)。ロックを解除すると、再び縦向きになり、横向きに戻ることはありません (したがって、自動方向が false であることは間違いなく干渉されません)。

この問題は、ゲームの実行中に電話をロックしてロックを解除した場合にのみ発生します。たとえば、ホームボタンを押してアプリがフォーカスされなくなった場合、ロックしてロックを解除し、一時停止したゲームに戻ると、横向きのままになります。

編集: 重要な発見をしました! これは、携帯電話で使用しているロック画面の種類に依存しているようです。Android 4 Galaxy S3を使用しています。ロック画面を使用しないように切り替えたところ、ロックを解除したときにアプリが横向きのままになりました。これは進歩です。残念ながら、別の Android 4.0 携帯電話を持っている友人が同じ問題を報告しているので、私の携帯電話だけではありません。

4

8 に答える 8

2

同じ問題があります。私はいくつかの異なるデバイスでテストしました。ロック画面にパスワードが必要な場合、それらのほとんどは実際にクラッシュするか、極端な遅延が発生します。私のソリューションでは、デバイスがスリープ状態になった後に自動方向付けを許可し、デバイスが横向きになると再び無効にします。デバイスが縦向きになっている間は、すべてのコンテンツを非表示にします。参考までに、私はまだこのコードのすべてをテストしていないので、何かが欠けている可能性があります。

//Before the device goes to sleep, enable auto-orientation
NativeApplication.nativeApplication.addEventListener(Event.DEACTIVATE, handleDeactivate, false, 0, true);
function handleDeactivate(e:Event):void
{
    stage.autoOrients = true;

    //listen for the device to re-activate
    e.currentTarget.addEventListener(Event.ACTIVATE, handleActivate, false, 0, true);
}

//Once the device is re-activated, check the orientation.
function handleActivate(e:Event):void
{
    e.currentTarget.removeEventListener(Event.ACTIVATE, handleActivate, false, 0, true);

    //if the orientation is portait, just listen for an orientation change
    if (stage.stageHeight > stage.stageWidth)
    {
        //It makes sense that you would just use stage.setAspectRatio(StageAspectRatio.LANDSCAPE) here,
        //however in my experience I've found that setting the aspect ratio here seems to cause an infinite loop of the device attempting to reset the orientation.
        //Instead, I will wait for the user to change orientation, and then lock it in landscape
        stage.addEventListener(StageOrientationEvent.ORIENTATION_CHANGE, onOrientationChange);
    }
    else
    {
        disableAutoOrientation();
    }
}

//Check if the new orientation is landscape. If so, disable orientation changes.
function onOrientationChange():void
{
    if (stage.stageWidth > stage.stageHeight)
    {
        stage.removeEventListener(StageOrientationEvent.ORIENTATION_CHANGE, onOrientationChange);
        disableAutoOrientation();
    }
}

//disable the auto-orientation feature
function disableAutoOrientation():void
{
    stage.autoOrients = false;
}
于 2012-09-27T01:18:53.940 に答える
2

これをアプリ記述子xmlに入れます

<aspectRatio>portrait</aspectRatio>
<autoOrients>false</autoOrients>
于 2012-06-21T08:14:02.797 に答える
0

ロック画面から再開した後の強制的なポートレート動作に関しても、同じ問題が何年にもわたって発生しました。これは、機能しているように見えるものを使用しました。

stage.addEventListener(StageOrientationEvent.ORIENTATION_CHANGE, onOrientationChange, false, 0, true);

private function onOrientationChange():void
{
    if (stage.stageWidth > stage.stageHeight)
    {
        stage.setAspectRatio(StageAspectRatio.PORTRAIT);
    }
    else
    {
        stage.setAspectRatio(StageAspectRatio.LANDSCAPE);
    }
}

デバイスがstageWidthを長辺として報告し、stageHeightを短辺として報告した場合、つまり、すべてのデバイスが予想どおりに方向を報告した場合、どうなるかはわかりませんが

于 2012-09-19T17:58:10.200 に答える
0

私はまったく同じ問題を抱えていました..パンチで転がしてゲームを流動的なレイアウトに再構築し、すべてが再配置されてサイズが変更されるまで。全体的にはうまくいきましたが、私は風景のままでいたほうがよかったでしょう。Googleの問題ではないと思います。FlashCS6の問題だと思います。CS5.5で公開した場合、このバグは発生しませんでしたが、AIRをゲームに統合できたため、CS6を入手しました。理由はわかりませんが、それが私の観察です。

于 2013-02-20T00:01:41.560 に答える
0

私は同じ問題で頭を悩ませています、これが主題に関する私の情報ダンプです。

私が見る限り、原因はロック画面がメイン画面のオーバーレイであるため、ロック画面を表示するために、アプリケーションとともにディスプレイがアクティブ化されます(「アクティブ化」イベントを受信して​​実行を開始します)。デバイスがロック画面でデフォルトで縦向きになっている場合(電話はほとんどそうですが、タブレットはほとんどそうしません)、アプリケーションは、その好みやAIRマニフェストの希望に関係なく、乗り物に沿ってドラッグされます。

その結果、アプリが最終的にフォアグラウンドに到達したとき(ユーザーが画面のロックを解除したとき)、アプリは縦向きになります。回避策は、アクティブ化イベントを受信したときに、目的の方向を手動で設定することです。ICSには追加の癖があります-ロック解除後にシステム通知バーが再表示され(フルスクリーンはもうありません)、ステージをフルスクリーンにリセットしても効果はありません。そして、それは私がなんとか得ることができた限りです。あなたが解決策を見つけたら通知をいただければ幸いです。

関連する問題は、ロック画面が表示されたときにゲームが下で実行を開始することです。これは、たとえば、アクションゲームで、すぐに入力が必要なもの(ゲームのどこかなど)の途中で停止した場合は悪い状況です。 :-))。その解決策を見つけたいと思います。

于 2012-07-15T21:55:40.617 に答える
0

アプリを最小化した後に最大化すると、横向きモードで表示され、画面は回転しませんが、問題は高さと幅が入れ替わることです。画面の半分が表示され、残りは空白の画面でした。デバイスをロックおよびロック解除すると、高さと幅が画面サイズに合わせて自動的に調整されます。

Event.ACTIVATEを使用して上記の問題を処理しました。アプリがアクティブな場合は、幅、高さ、scaleX、および scaleY をリセットします。Androidの 4.0、4.1、4.2バージョンでは正常に動作していますが、4.4、5.1を使用すると同じ問題が発生します。どうすればこれを修正できますか?

于 2015-07-15T11:07:33.263 に答える
0

いろいろいじった後、自分のデバイスで確実に動作する簡単な解決策を見つけました。基本的には、アクティブ化されているアプリケーションをリッスンしてから、向きを希望する方向にリセットするだけです。

NativeApplication.nativeApplication.addEventListener(Event.DEACTIVATE, onDeactivate);

private function onDeactivate(e:Event):void
{
    this.addEventListener(Event.ACTIVATE, onActivate);
}

private function onActivate(e:Event):void
{
    this.removeEventListener(Event.ACTIVATE, onActivate);

    if(stage.deviceOrientation == StageOrientation.ROTATED_RIGHT)
        stage.setOrientation(StageOrientation.ROTATED_LEFT);
    else
        stage.setOrientation(StageOrientation.ROTATED_RIGHT);
}
于 2014-02-06T07:17:18.947 に答える
0

それは古いスレッドだと思いますが、私はこの同じ問題を自分で抱えていたので、これが問題を解決したようです。追加のリスナーはやや粗雑ですが、機能します。

var default_orientation:String;
default_orientation=stage.orientation;

stage.addEventListener(Event.ENTER_FRAME,check_if_stage_is_rotated);

function check_if_stage_is_rotated(e:Event):void{
    if (stage){
        if(stage.orientation!=default_orientation){
            stage.setOrientation(default_orientation);
        }
    }

}
于 2014-02-28T12:22:28.193 に答える