1

SWF のロード時に XY ステージ座標を自動クリックする方法はありますか?

EDIT:ちなみに、これはコード全体であり、キュー付きのYouTubeビデオです。キューの任意の場所をクリックして、SWF の読み込み後に自動的に再生したいだけです。

Security.allowDomain("www.youtube.com");


var loader:Loader = new Loader();
loader.contentLoaderInfo.addEventListener(Event.INIT, onLoaderInit);
loader.load(new URLRequest("http://www.youtube.com/apiplayer?version=3"));

function onLoaderInit(event:Event):void {
    addChild(loader);
    loader.content.addEventListener("onReady", onPlayerReady);
    loader.content.addEventListener("onError", onPlayerError);
    loader.content.addEventListener("onStateChange", onPlayerStateChange);
    loader.content.addEventListener("onPlaybackQualityChange", 
        onVideoPlaybackQualityChange);
}

function onPlayerReady(event:Event):void {

    trace("player ready:", Object(event).data);


    player = loader.content;

    player.setSize(300, 250);
    player.cueVideoById("AfTCtRDsWVw",0);
    player.mute();
}



function onPlayerError(event:Event):void {
    trace("player error:", Object(event).data);
}

function onPlayerStateChange(event:Event):void {
    trace("player state:", Object(event).data);
}

function onVideoPlaybackQualityChange(event:Event):void {
    trace("video quality:", Object(event).data);
}
4

3 に答える 3

3

はい、手動で MouseEvent.CLICK イベントをステージにディスパッチする必要があります。

var yourX:Number = 40; //Whatever you want
var yourY:Number = 40; //Whatever you want
//Make sure you have a link to the stage (usually after Event.ADDED_TO_STAGE event occured)
stage.dispatchEvent(new MouseEvent(
    MouseEvent.CLICK, 
    true, 
    false, 
    yourX,
    yourY);

この MouseEvent に関連する特定の DisplayObject が必要な場合は、追加のパラメーターを MouseEvent コンストラクターに渡す必要があります。

var yourX:Number = 40; //Whatever you want
var yourY:Number = 40; //Whatever you want
//Make sure you have a link to the stage (usually after Event.ADDED_TO_STAGE event occured)
stage.dispatchEvent(new MouseEvent(
    MouseEvent.CLICK, 
    true, 
    false, 
    yourX,
    yourY,
    linkToYourRelatedDisplayObject);

==更新==

さて、私はそれを作りました。少し「ハッキング」して、ここにあります。YouTube プレーヤーには、LargePlayerButton を含む videoApplication を含む safeLoader オブジェクトが含まれています。この LargePlayerButton には MouseEvent.CLICK イベント リスナーがあるため、ステージにディスパッチする代わりに、このボタンにイベントをディスパッチする必要があります。autoClick シミュレーションを含む完全なコードは次のとおりです。

import flash.events.MouseEvent;
import flash.events.Event;
import flash.display.DisplayObjectContainer;

// The player SWF file on www.youtube.com needs to communicate with your host
// SWF file. Your code must call Security.allowDomain() to allow this
// communication.
Security.allowDomain("www.youtube.com");

// This will hold the API player instance once it is initialized.
var player:Object;

var loader:Loader = new Loader();
loader.contentLoaderInfo.addEventListener(Event.INIT, onLoaderInit);
loader.load(new URLRequest("http://www.youtube.com/apiplayer?version=3"));

function onLoaderInit(event:Event):void {
    addChild(loader);
    loader.content.addEventListener("onReady", onPlayerReady);
}

function autoClick():void
{
    //=========================
    //Some nested children, we need to dig through a bit to get to the LargePlayButton
    var safeLoader:DisplayObjectContainer = (loader.content as DisplayObjectContainer).getChildAt(0) as DisplayObjectContainer;
    var videoApplication:DisplayObjectContainer = safeLoader.getChildAt(0) as DisplayObjectContainer;
    var largePlayBtn:DisplayObjectContainer = videoApplication.getChildAt(6) as DisplayObjectContainer; 
    //=========================
    //And finally dispatching our event to this button. It will think that a person has clicked it
    largePlayBtn.dispatchEvent(new MouseEvent(MouseEvent.CLICK, 
                                       true, 
                                       true, 
                                       stage.stageWidth / 2,
                                       stage.stageHeight / 2));

}

function onPlayerReady(event:Event):void {
    // Event.data contains the event parameter, which is the Player API ID 
    trace("player ready:", Object(event).data);

    // Once this event has been dispatched by the player, we can use
    // cueVideoById, loadVideoById, cueVideoByUrl and loadVideoByUrl
    // to load a particular YouTube video.
    player = loader.content;
    // Set appropriate player dimensions for your application
    player.setSize(300, 250);
    player.cueVideoById("AfTCtRDsWVw",0);
    //====================================================
    //As long as player is loaded we can call our function
    autoClick();
}

いい練習になりました、乾杯:)

于 2013-08-31T08:45:26.573 に答える
0

Youtube には、インテリジェントなアンチ ハッキング機能があるようです。IDE で SafeLoader の子を取得できますが、Flash Player または Web では、SafeLoader にアクセスできず、その後の子を制御できません。これが、コードが IDE 上では機能するが外部では機能しない理由です。サンドボックスのセキュリティに関係しているのかもしれませんが、もっと複雑かもしれません。

于 2013-11-17T13:10:05.093 に答える
-1

明らかなセキュリティ上の理由から、それが可能かどうかは非常に疑わしいです:http://www.adobe.com/devnet/flashplayer/articles/fplayer10_uia_requirements.html

于 2013-08-31T14:44:48.117 に答える