投稿日:2013-03-03 Sun
こんばんわ・・フッチーです。
びっくりしました。
「XNA」の開発を終了
知らなかった・・・XNA終了してしまうんですね。
てっきりWindowsPhone8(日本で出るか不明ですが・・)はXNAでゲーム開発だと思っていたのですが・・・
当時クリエイトウェーブみたいに小規模の会社とか、個人とかゲーム制作しても発表する場といういものが、まり整っていませんでした。もちろんベクターとかもあるしPC上では出来なくはなかったんですが、PCは普及台数こそ大きいですが難しい場でもありました。 現在でもPCではあまり考えないですもんね。
XNAが出てきた時は、これでXboxでソフト出してみようと考えてワクワクしたものでした。
でも今はスマートフォン時代・・・ iPhoneや、アンドロイドでソフトは作れるし環境も整ってきてます。
普及は加速する一方。
WindowsPhoneがもっと早くでて、もっと普及してればXNAも状況ちがったかもしれないですね。
クリエイトウェーブも仕事の大半はスマートフォンという状況になってきました。
自分も、作ろうと思うとXNAでXboxとは考えなくなってしまった。
やっぱりアンドロイドやiPhoneで考えてしまいます。 いまや両方マルチプラットフォームで開発できるUnityやAdobeAirを中心に考えてしまう。
Xboxの次世代機に備えて、新たになにか出てくるんですかね。
投稿日:2009-09-10 Thu
お疲れ様です。フッチーです。C#とFlashの連携その4を書いてから、かなり間が空いてますね・・・・
C#とFlashの連携その4では、C#とC#に貼り付けたFlashの連携において、Flash側からC#へは「fscommand」、C#側からFlash側へはと「SetVariable」で行いました。
でも、「ExternalInterface」を使って、もっと柔軟に連携する事が出来るハズじゃあと色々調べてみたら、
http://livedocs.adobe.com/flex/3_jp/html/help.html?content=19_External_Interface_10.html
とかを見ててようやっと判ったのでメモ。
下準備として
http://www.adobe.com/devnet/flash/?view=samples
のページの「Flash CS3 Professional samples」の項目のとこの「Programming_ActionScript3.0_samples.zip」をダウンロードして解凍しておきます。
下準備が終ったら、まずFlashを作ります。
flaファイルの名前は、test.flaとしました。FlashCS3(ActionScript3)ファイルです。
画面にムービークリップを作りインスタンス名「btn_mc」としてます。
後、C#から来た値を確認する為に「debug」と名前を付けたダイナミックテキストを置いてます。
ちょっとのActionScriptなので、このままタイムラインに書いてしまいます。
btn_mc.addEventListener (MouseEvent.CLICK, onClickFunc);
function onClickFunc (e:MouseEvent):void
{
//C# アプリ関数の呼び出し
ExternalInterface.call ("testFunction","a1","b2","c3");
}
//C#から呼ばれるコールバック関数の登録
ExternalInterface.addCallback ("testFunction", testFunction);
function testFunction (...args):void
{
//C# アプリコールバック関数
debug.text = args[0] + " " + args[1] + " 受け取りました";
}

ステージ上の"sv"と書いてあるところが、ダイナミックテキスト「debug」
"sv"って文字に意味はありません・・・・
ステージ下の真っ赤な■が、ムービークリップ「btn_mc」です。
真ん中の1はただの目印。なんの意味もありません。
ExternalInterface.call ("testFunction","a1","b2","c3");
で、C#側のメソッド「testFunction」を呼び出します。
その後に続く"a1","b2","c3"はメソッド呼び出す時の引数。
とりあえず、いくつ付けても大丈夫です。
ExternalInterface.addCallback ("testFunction", testFunction);
で、C#がFlash側のメソッド「testFunction」を呼び出します。
引数の数はいくつでもいいように(...args)にしてます。
次はC#
VC#2005で、Windowsアプリケーションの新規プロジェクトを作成します。
プロジェクト名は「FlaExternal」としました。
.NETへのFlashの貼り付け方はこちらを参考に
開発日記開始
ただこの時は、張り付いた「axShockwaveFlash1」のプロパティ「Movie」に「c:\test.swf」と入れて読み込ませてますが、これだとswfの位置が、C#で作成したexeの位置に関係なくCドライブ上の「test.swf」固定されてしまいます・・・・これは不便。
今回はexeと同じとこに置いてある「test.swf」を読み込ませます。なのでプロパティ「Movie」は空白のまま。
という事で、とりあえずデバッグモードで動かすのでexeが出来上がる「bin」フォルダの中の「Debug」の中へ、さっきのflaをパブリッシュした「test.swf」を放り込んでおきます。
出来上がったフォームをダブルクリックすると「Form1.cs」が立ち上がります。
private void Form1_Load(object sender, EventArgs e)
{
//exeと同階層の「test.swf」読み込み
String swfPath = System.IO.Directory.GetCurrentDirectory() + "\\test.swf";
axShockwaveFlash1.LoadMovie(0, swfPath);
}
とフォームが起動した時に呼ばれる「Form1_Load」メソッドの中に
String swfPath = System.IO.Directory.GetCurrentDirectory() + "\\test.swf";
axShockwaveFlash1.LoadMovie(0, swfPath);
の2行を書きます。
実行するとフォームの中に「test.swf」が張り付いてるハズです。
せっかくのFlahなので、フォーム全体の大きさに、どうせならウィンドウサイズが変わってもFlashのサイズもピタっと会うようにしてしまいましょう・・・って事で

Form1.cs[デザイン]を選んだ状態でプロパティウィンドウの「イベント」を選択。
その中の「SizeChanged」をダブルクリック。
そうするとForm1.csの中にメソッド「Form1_SizeChanged」ができあがるので
private void Form1_SizeChanged(object sender, EventArgs e)
{
axShockwaveFlash1.Width = this.Size.Width;
axShockwaveFlash1.Height = this.Size.Height;
}
と
axShockwaveFlash1.Width = this.Size.Width;
axShockwaveFlash1.Height = this.Size.Height;
の2行を書いてあげます。
これでウィンドウサイズを変えた時にFlashのサイズがウィンドウにぴったりあうようになりますが
起動時にもあわせたいので、さっきの2行をメソッド「Form1_Load」の中にも追加。
これでバッチリです。
さていよいよFlashとC#の連携。
「Programming_ActionScript3.0_samples.zip」を解凍して出来た「Samples」フォルダの中に「IntrovertIM_CSharp」フォルダがあります。
まあ、これ自体がC#とFlashの連携見本のC#プロジェクトではあるのですが、その中の「ExternalInterfaceProxy」フォルダの中に
ExternalInterfaceCall.cs
ExternalInterfaceCallEventArgs.cs
ExternalInterfaceProxy.cs
ExternalInterfaceSerializer.cs
の4ファイルがあります。
これが、
http://livedocs.adobe.com/flex/3_jp/html/help.html?content=19_External_Interface_10.html
のヘルプで説明されている4ファイルです。今回この4ファイルをそのまま使います。
この4ファイルを作ったプロジェクト「FlaExternal」の中にコピーしてあげます。
プロジェクトのcsファイルとして認識させます。

Form1.csに
using Flash.External;
を追加
Flashからの命令を受け取るメソッドを追加します。
private object proxy_ExternalInterfaceCall(object sender, ExternalInterfaceCallEventArgs e)
{
System.Diagnostics.Debug.WriteLine(e.FunctionCall.FunctionName);
System.Diagnostics.Debug.WriteLine((string)e.FunctionCall.Arguments[0]);
System.Diagnostics.Debug.WriteLine((string)e.FunctionCall.Arguments[1]);
System.Diagnostics.Debug.WriteLine((string)e.FunctionCall.Arguments[2]);
return null;
}
System.Diagnostics.Debug.WriteLineは
C#でtraceで紹介した、デバッグ用にメッセージをイミディエイトウインドウに出力する為の命令です。
Flashから送られてきた引数を出力させてみます。
実際にFlashからExternalInterfaceが呼ばれたときにメソッド「proxy_ExternalInterfaceCall」を実行させるための処理をフォーム起動時に実行されるメソッド「Form1_Load」に
proxy = new ExternalInterfaceProxy(axShockwaveFlash1);
proxy.ExternalInterfaceCall += new ExternalInterfaceCallEventHandler(proxy_ExternalInterfaceCall);
を追加します。

結果は、ごらんの通り。
Flashのムービークリップを押すと、C#のイミディエイトウインドウにActionScriptに書かれたメソッド名、引数が表示されます。
これでFlashからC#への連携は終了しました。
今度は、C#側からFlashへデータを渡すようにします。
とりあえず、FlashからC#にデータが渡ってきたら、そのタイミングでC#からFlashにデータを渡すようにします。
メソッド「proxy_ExternalInterfaceCall」の中に
proxy.Call("testFunction", "X1", "Y1");
を追加
これで、Flashのムービークリップを押すと、C#側からFlash側のメソッド「testFunction」が引数"X1", "Y1"付きで呼び出されます。

これで、C#とFlashの双方で柔軟なやりとりが出来るようになりました。
やはり、C#とFlashの連携その4のやり方よりこっちの方が便利ですね・・・・
投稿日:2009-09-06 Sun
おつかれさまです。フッチーです。
Flashアプリだけじゃ、やれない機能があったりします。
ファイルの読み書きもそうだし、常駐アプリとかもそう。
で、Airを使えば一気に解決なのですが、そうもいかない事情があって.Netでラップすることにしました。
Directorで包む手もあるんですが、DirectorだとDirector内部のFlashプレーヤーがActionScript2までしか使えないので、それ又不便。
.NETの場合も、ActiveXプレーヤーを包むだけなので、同手法だとDirectorでもいけそうな気もするけど、あえてDirectorを選ぶ必要もない訳で・・・・
.NET(VC#2005の場合)でのFlashの包み方はこちら
開発日記開始
VC#2005のフォームプログラムを組んでて、FlashでいうTraceってないのかなと思ってさがしてみたらあった
System.Diagnostics.Debug.WriteLine("ここのメッセージ");
まあ基本的な命令でしょうが、C#はあまりメインで触ってなかったのでメッセージボックスとかで表示させて確認したりしてましたよ。これが。
で、これで本とかみてるとイミディエイトウインドウに出力されるらしいんだけど、どううまくいかない・・・
?と思って調べてみると出力ウィンドウ表示されておりました。
でも出力ウィンドウだと、見たいメッセージ以外の色々なメッセージが混在してるので非常に見にくい。
まして、本とかだとイミディエイトウインドウに表示されているので、なにかあるのか? と思ったらありました。
「ツール」メニューから「オプション」を選び、「デバッグ・全般」のなかから
「出力ウインドウの文字をすべてイミディエイトウインドウにリダイレクトする」
にチェックマークをつける。
これで、FlashでTraceを使う感覚で使える・・・
でもC#はC#で結構組み安いですね。
Flashで組んでラップじゃなくても、C#でまんま組めばいいような気もしてきました。
もちろん組み安いと言っても、FlashやDirector程、楽ではないんですけどね。
でも、基本的になんでも出来るのし、資料もネットで大体出てきて解決できますしね。
まあ、でも今から路線変更は危ないか。。。時間もないし。
このままXNAに生かせればいいなあ・・
投稿日:2009-08-04 Tue
お疲れ様です。 フッチーです。8月11日より「Xbox Liveインディーズゲーム」が始まります。
それってなにかというと、「XNA Game Studio」というのをVisual C#(無料版でもOK)に入れて、Xbox360のゲームをC#で作れるというものです。
そしてXbox360のストアで販売も行えます。しかも世界市場で・・・
XboxだけでなくWindowsのゲームも一緒に作れるのも特徴として挙げられます。
イマイチ日本では、ぱっとしない印象のあるXbox360ですが、世界では人気ゲーム機で確固たる地位を築いてるゲーム機でもあるので、市場はそこそこ大きいのではないでしょうか。
もちろん、自分も持っています!
クリエイトウェーブは、前からゲーム制作を目指してる方向性が強かったりします。
最近は、Flashが多いので、Flashといえばゲーム以外でもよく使われるので、必ずしもゲームの仕事ばかり行っている訳ではありませんが、それでも携帯、PCどちらもFlashゲームは多く作ってますし、人脈的にもゲーム業界、アニメ業界と繋がってたりします。
Directorメインの時代は、よりゲーム関係の仕事が多かった時期でした。
と振り返りつつも、やはりいつかはコンシューマゲーム機で動くゲームを作成してみたいという願望はずっとありました。
それが、XNAでようやくクリエイトウェーブのような小規模チームでも、ようやく実現可能となってきました。
なんか、とてもワクワクしてます。
XNA自体は数年前から知っていて、ずっと注目していたのですが、それが一般ユーザーの目に触れる機会がやってきました!!
最初はXNAの勉強をしようにも洋書(もちろん翻訳済み)ばかりでしたが、最近は和書も増えてきました。自分も既に何冊か通ってみたのでお勧め本のご紹介。
![]() | XNA Game Studioで始めるゲームプログラミング―Windows&Xbox360対応 Ver.2.0対応 (2008/06/10) オフィス加減 商品詳細を見る |
XNA2.0ですが、判りやすくて、入門には最適でした。
![]() | XNA ゲームプログラミングブック XNA Game Studio 2.0対応 (2008/10/24) XELF布留川 英一 商品詳細を見る |
この本も結構気に入ってる1つ。
![]() | XNAゲームプログラミング Xbox 360とWindowsのクロスプラットフォーム開発 (GAME DEVELOPERシリーズ) (2009/02/28) 赤坂 玲音 商品詳細を見る |
最近は、この本が並んでるのをよく見ます。 XNA Game Studio 3.0対応なのもポイントかな。
なにか作るぞ~~!!
まあ、作るのはいいとして、問題はやっぱりゲーム案ですね・・・ そこが難しい。
なんかいい案はないですかねえ(笑
やはり専門のゲームプランナーが要るかな・・・そんな事も考えたり。
XNA クリエーターズ クラブ
にも登録してみました。
8月11日は、とりあえずどんなゲームが売られているか何本か試してみよう。
投稿日:2008-10-08 Wed
C#やってて、コード整形のショートカット使おうとそたんですが、「あれ?、どうだったっけ?」
って事態に陥りました。
という訳で、忘れないようメモ
整形したい行を選んで
Ctrl + K
Ctrl + F
もちろん、複数行でもOK。
まあFlashのスクリプトエディタでいう、オートフォーマット。 あっちは行単位でなく全体ですが・・・
でもFlashDevelopやFlexBuilderで組むので使う機会は、ほとんどなくなりました。
テーマ:.NET Framework - ジャンル:コンピュータ
△ PAGE UP