如何将Ruffle Flash播放器模拟器嵌入HTML文件?

3

我需要帮助将swf文件使用ruffle (https://ruffle.rs/) 工具嵌入我的HTML网站。在apache的httpd.conf中添加了"AddType application/wasm .wasm",但是我的本地服务器上无法显示以下代码:

<html><head><script src="ruffle/ruffle.js"></script>
</head>
<body>
<script>
    window.RufflePlayer = window.RufflePlayer || {};
    window.addEventListener("load", (event) => {
        const ruffle = window.RufflePlayer.newest();
        const player = ruffle.createPlayer();
        const container = document.getElementById("container");
        container.appendChild(player);
        player.load("mig29.swf");
    });
</script>
<script src="ruffle/ruffle.js"></script>

</body>
</html

我也尝试了这段代码,但还是没有成功:
<!doctype html>
<html>
<head>
    <meta charset="utf-8" />
    <title>WORKAROUND</title>

    <script>
        window.RufflePlayer = window.RufflePlayer || {};
        window.RufflePlayer.config = {
            "public_path": "ruffle/",
            "polyfills": ["static-content", "plugin-detect", "dynamic-content"]
        };
    </script>
    <script src="ruffle/ruffle.js"></script>

    <!-- Start workaround -->
    <script>
        const swfobject = {};
    </script>
    <script>
        Object.defineProperty(swfobject, "embedSWF", {
            value: function() {
                var ruffle = window.RufflePlayer.newest();
                var player = ruffle.create_player();
                var container = document.getElementById(arguments[1]);
                container.innerHTML = "";
                container.style.width = arguments[2] + "px";
                container.style.height = arguments[3] + "px";
                player.style.width = container.style.width;
                player.style.height = container.style.height;
                container.appendChild(player);
                player.stream_swf_url(arguments[0]);
            },
            writable: false,
            configurable: false
        });
    </script>
    <!-- End workaround - This code also works if placed before <swfobject.js> -->

    <script src="swfobject.js"></script>

</head>
<body>

<div id="file_div">Flash Player not detected!</div>
<script>
    swfobject.embedSWF("mig29.swf", "file_div", "550", "400", "8");
</script>

</body>
</html>

我在他们的Discord上问了问题,但迄今为止没有回答。如果有人对ruffle更熟悉,请协助一下。

2个回答

8
我最近发现了如何使其工作。调用由 ruffle.createPlayer() 返回的播放器上的 .play 方法需要一个对象或至少期望一个对象。使用 player.load({ url: '/path/to/swf.swf' }) 将会起作用。
swfobject.embedSWF = function(url, cont, width, height){
    var ruffle = window.RufflePlayer.newest(),
        player = Object.assign(document.getElementById(cont).appendChild(ruffle.createPlayer()), {
            width: width,
            height: height,
            style: 'width: ' + width + 'px; height: ' + height + 'px',
        });
    
    player.load({ url: url });
}

完整代码:
<!DOCTYPE HTML>
<html>
    <head>
        <meta charset='utf8'>
    </head>
    <body>
        <div id='ruffle'></div>
        <script src='https://e9x.github.io/ruffle-example/ruffle.js'></script>
        <script>
var swfobject = {};

swfobject.embedSWF = function(url, cont, width, height){
    var ruffle = window.RufflePlayer.newest(),
        player = Object.assign(document.getElementById(cont).appendChild(ruffle.createPlayer()), {
            width: width,
            height: height,
            style: 'width: ' + width + 'px; height: ' + height + 'px',
        });
    
    player.load({ url: url });
}

swfobject.embedSWF('https://e9x.github.io/ruffle-example/1on1soccer_24.swf', 'ruffle', 500, 500);
        </script>
    </body>
</html>

(将github.io链接替换为您自己的链接)


你好,谢谢回复。请问您能否提供完整的HTML和Body代码?我仍然无法让它正常工作。 - Thundermole
抱歉,我犯了个小错误。我会编辑帖子,包含完整的代码。 - e9x
你好,非常感谢。你知道除了“AddType application/wasm .wasm”之外,是否还需要在apache中配置其他内容吗?使用您提供的链接https://e9x.github.io/ruffle/ruffle.js,现在它对我有效,但是如果我本地测试(只有ruffle/ruffle.js),则什么也不会加载。 - Thundermole
1
我认为CORS可能是问题所在? - e9x
我将你的第一行修改为以下内容,这使得 Ruffle 成功启动了我的游戏:var swfobject = {ua: {pv: {}}, hasFlashPlayerVersion() { return true }}; - Jakob Lindskog

1
你还没有创建播放器的

在和之间的所有代码如下:
<div id="container"> </div>

<script src="ruffle/ruffle.js"></script>
    <script>
        window.RufflePlayer = window.RufflePlayer || {};
        window.addEventListener("load", (event) => {
            const ruffle = window.RufflePlayer.newest();
            const player = ruffle.createPlayer();
            const container = document.getElementById("container"); 
            container.appendChild(player);
            player.load({
                url: "mig29.swf", 
                backgroundColor: "#000", 
             });
            player.style.width = "450px"; 
            player.style.height = "450px";
        });
    </script>

请记得在您的.htaccess文件中添加以下行,并上传它:

AddType application/wasm .wasm wasm

同时,请记得将整个ruffle自托管目录(6个文件)上传到根目录。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接