ぶらっくあすぱらがす

ぶらっくあすぱらのようなありえなさ。そんな雑記。

プロフィール

PENTACOOL

Author:PENTACOOL
(*´ω`*)

カレンダー

04 | 2018/05 | 06
- - 1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31 - -

最近のコメント

最近のトラックバック

ブロとも申請フォーム

ブログ内検索

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
ActionScriptを始めて、1週間経ちませんがどうにかこうにかなった(´д`;)
FlashとC#の値の受け渡しがなぜか失敗して困っていましたよ。
ネット上に落ちてるサンプルがことごとくダメで涙目。
いろいろとした結果以下のようなコードで動作ができるようになりました。

サンプルアプリ
テストアプリ
フォーム上部にtest.swfを表示。
GetボタンでFlash内の変数の値をテキストボックスに格納。
Setボタンでテキストボックスの値をFlash内の変数にセット。
CallボタンでFlash内の関数を呼び出し。引数としてテキストボックスの値を渡す。
以下コードです。体裁の関係で若干変に書き直してしまった('A`)
正直こんなコード需要あるのかな?

C#のコード、フォームデザイナ部は略(Form1.cs)
/// <summary>Flash<->C#のテスト</summary>
/// <author>PENTACLE</author>
/// <version>1.0</version>
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO;

namespace FlashtoCS {
    public partial class Form1 : Form {
        public Form1() {
            InitializeComponent();
        }

        string path = "";
        private void Form1_Load(object sender, EventArgs e) {
            //Flashのパスを設定(debugフォルダ内にtest.swfを入れておく)
            path = Application.StartupPath + "\\test.swf";
            //Flashのロード
            axShockwaveFlash1.LoadMovie(0, path);
        }

        private void button1_Click(object sender, EventArgs e) {
            //Flash内の変数の値を取得
            string get = axShockwaveFlash1.GetVariable("testString");
            //テキストボックスに表示
            textBox1.Text = get;
        }

        private void button2_Click(object sender, EventArgs e) {
            //Flash内の変数にテキストボックスの値を設定
            axShockwaveFlash1.SetVariable("testString", textBox1.Text);
        }

        private void button3_Click(object sender, EventArgs e) {
            //Flash内の関数呼び出し。引数はテキストボックスの値。
            string func = "<invoke name=\"DrawString\" returntype=\"xml\">" +
                         "<arguments>" +
                         "<string>" + textBox1.Text + "</string>" +
                         "</arguments>" +
                         "</invoke>";
            axShockwaveFlash1.CallFunction(func);
        }
    }
}

ActionScriptのコード。test.swfという名前で。(FlashTest.as)
/**
 * Flash<->C#のテスト
 * @author PENTACLE
 * @version 1.0
 */
import flash.external.*;
class FlashTest {
        /**
         * 変数
         */
        var testString:String;

        /**
         * エントリポイント
         */
        static function main() {
            //変数の初期化
            _root.testString = "FlashTest";
            //デバッグ用
            _root.createTextField("debug", 1, 0, 0, 300, 200);

            //C#とのやり取りに使用
            //外部からの呼び出しが可能なように登録
            var obj:FlashTest = new FlashTest();
            ExternalInterface.addCallback("DrawString", obj, obj.DrawString);
            //変数の監視
            _root.watch("testString", obj.onChangeTestString);
        }

        /**
         * onChangeTestString
         * 変数testStringの変化
         * @param	prop
         * @param	oldVal
         * @param	newVal
         * @param	userData
         */
        private function onChangeTestString(prop, oldVal, newVal, userData) {
            //デバッグ用に出力
            _root.debug.text = "oldVal : " + oldVal + "\nnewVal : " + newVal;
            return newVal;
        }

        /**
         * DrawString
         * デバッグテキストに出力
         * @param	str
         */
        private function DrawString(str:String) : Void {
            //デバッグ用に出力
            _root.debug.text = "Call DrawString : " + str;
        }
}
スポンサーサイト

コメント

コメントの投稿














管理者にだけ表示を許可する

 TOP 

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。