在Flash swf中显示配置文件图片时出现问题

时间:2011-03-01 21:50:57

标签: actionscript-3 facebook api

我按照本教程Loading Facebook Profile Picture Into Flash SWF Using Graph API来获取用户个人资料图片,以便在我的Flash游戏中展示,但我遇到了一些问题。

import com.facebook.graph.Facebook;
import com.facebook.graph.data.FacebookSession;
import com.facebook.graph.net.FacebookRequest;

import flash.events.Event;
import flash.events.IOErrorEvent;

//place your APP ID here
const APP_ID:String = "app_id";

//Initialize facebbok library
Facebook.init(APP_ID, HandleLogin);

function HandleLogin(response:Object, fail:Object):void
{
    if(Facebook.getSession().accessToken)
    {
        LoadMyInfo();
        LoadMyPicture();
    }
}

function LoadMyInfo():void
{
    Facebook.api("/me", MyInfoLoaded);
}

function MyInfoLoaded(response:Object, fail:Object):void
{
    nameTextField.text = response.name;
}

function LoadMyPicture():void
{
    debug.text = "Entered loadMyPicture() function ";

    var loader:Loader = new Loader();
    loader.contentLoaderInfo.addEventListener(Event.COMPLETE, MyPictureLoaded, false, 0, true);

    var request:URLRequest = new URLRequest("facebookProxy.php");
    var variables:URLVariables = new URLVariables();

    variables.path = Facebook.getImageUrl(String(Facebook.getSession().uid), 'large');

    debug.appendText(" \nvariables.path: " + String(variables.path));

    request.data = variables;

    debug.appendText(" \nrequest.data: " + String(request.data))

    loader.load(request);

    debug.appendText(" \n" + String(loader.load(request)));
}

function MyPictureLoaded(event:Event):void 
{
    debug.appendText(" \nEntering MyPictureLoaded");

    var loader:Loader = event.target.loader;
    loader.contentLoaderInfo.removeEventListener(Event.COMPLETE, MyPictureLoaded);
    loader.contentLoaderInfo.removeEventListener(IOErrorEvent.IO_ERROR, MyPictureLoadError);        
    var bitmap = Bitmap(loader.content);
    bitmap.smoothing = true;

    //Note: picturePlaceholder is just a blank movie clip on the Stage
    bitmap.x = picturePlaceHolder.x;
    bitmap.y = picturePlaceHolder.y;
    bitmap.width = picturePlaceHolder.width;
    bitmap.height = picturePlaceHolder.height;
    picturePlaceHolder.addChild(bitmap);

    debug.appendText(" \nBitmap is null: " + String(bitmap == null) +
                     " \nBitmap X: " + String(bitmap.x) + " Bitmap Y: " + String(bitmap.y) +
                     " \nBitmap width: " + String(bitmap.width) +
                     " \nBitmap height: " + String(bitmap.height))
}

function MyPictureLoadError(e:IOErrorEvent):void
{
    debug.appendText("Loading Error");
}

这是我的代码在遵循上面链接上的教程后的样子。通过调试,我注意到函数 MyPictureLoaded 永远不会被调用。

他们从未指定我将其称为 LoadMyPicture 的功能。我假设它会与 LoadMyInfo 一起使用,所以我把它放在那里。他们有一个工作示例,但没有源代码,所以我希望有人能够对此有所了解。

编辑1

Here就是我在Facebook上展示时的样子。最后一行 debug.appendText(“\ n”+ String(loader.load(request))); 输出undefined。我还对 variables.path = Facebook.getImageUrl(String(Facebook.getSession()。uid),'large')进行了更改; 我添加了(String(),'large ')因为在文档中它说要将字符串传递到那里。 编辑:我意识到添加String()毫无意义。

1 个答案:

答案 0 :(得分:1)

var request:URLRequest = new URLRequest("facebookProxy.php");

您是否参与了在服务器上编写服务器端PHP代理加载器的教程部分?

如果您在运行此服务器的服务器上没有名为facebookProxy.php的文件,则它将无效(代码正在请求“./facebookProxy.php”,这可能不存在)。如果要在本地计算机上的调试器中运行它,则需要将该文件与swf放在同一目录中,并确保在本地主机上运行apache / php。

如果这对您来说太多了,我建议您关注API项目页面中的一些示例:http://code.google.com/p/facebook-actionscript-api/downloads/detail?name=GraphAPI_Examples_1_6.zip&can=2&q=