hIDDEN bLOG » MonoTouch

2011/12/15 木曜日

C#とCocos2Dでウハウハゲーム開発

このエントリをはてなブックマークに追加
Filed under: iPhoneアプリ,MonoTouch — @ 2:15:03

はじめに

この記事はiOS Advent Calendarの12月15日ぶんとして書いてますよっと。

iOSでC#

iOS開発者の諸兄にはもうご存知のかたも多いと思うが、去年はいろいろ紆余曲折があったわけで、いまiOS用のネイティブアプリは、Objective-C以外でもいろいろな言語で開発することができる。
C#でiOSアプリを開発するには、最近だとUnityが熱いが、よりネイティブに近い環境としてはMonoTouchというものが販売されている。
MonoTouchはiOS SDKの各APIをごく薄くラップしたライブラリを持っており、そのぶんOSアップデートへの対応が早いなどの利点がある。

iOSでC#でゲーム

ここで取り上げるのが、2Dゲーム向けフレームワークとして定評のあるCocos2Dである。
何パターンかのMonoTouch向けCocon2Dライブラリが公開されているが、今回注目するのはCocosNetというライブラリ。
ネイティブなCocos2Dをラップするのではなく、完全にC#のソースコードに移植しているのがこれである。おかげで移植カバー率はそれほど高くないという欠点はあるものの、後述するおおきな利点が期待できる。

iOSでC#でゲームつくってみる

CocosNetを使ったコーディングの例を、少しだけサンプルとともに追ってみる。

まずは初期化。
Application開始直前にでも、OpenGL ES1用のグラフィックコンテキストを生成しておく。

static void Main( string[] args )
{
    var c = Utilities.CreateGraphicsContext( EAGLRenderingAPI.OpenGLES1 );
    UIApplication.Main( args );
}

次いではDirectorの初期化だ。
とりあえずはAppDelegate.FinishedLaunching()あたりで実行するのが手軽だろうか。。。
パラメータを順次設定して、最後にUIWindowにアタッチしている。

var d = Director.Instance;
d.DeviceOrientation = DeviceOrientation.Portrait;
d.AnimationInterval = 1.0 / 60.0;
d.IsDisplayFPS = true;
 
d.AttachInView( window );

そしてシーンとスプライトの初期化。
これで画面に何かが表示できるはずだ。

var scene = new Scene();
var s = new Sprite( "splite.png" );
s.SetPosition( d.WinSize.Width / 2, d.WinSize.Height / 2 );
scene.AddChild( s, 0 );
d.RunScene( scene );

もういっこおまけに、アニメーションも。

MoveTo move = new MoveTo( 1.0f, new PointF( 0, 0 ) );
s.RunAction( move );

Cocos2Dを触ったことがある人なら、これでだいたいの移植具合が分かってもらえるのではないかと思う。
その他パーティクル・パララックスノード・タイルマップなど、有用そうなクラス群はひととおり移植されている。
一点、アニメーションのイージングが移植されていないのが残念だが、これは追加コードを少し書いてやるだけですぐ移植できた。
このように、ゲームをシンプルに作り始める素地は、すでにしっかりと整備されている印象だ。

iOSでC#でゲームつくったけど他のスマホでも

さて、いろいろプランを練り上げてゲームの完成をみる頃には、ロジックの分離やシーケンスの整理が行き届いたエクセレントなソースコードが手元にできあがっているはずだ。
そうすると、せっかくだから別のプラットフォームにむけても、このジーニアスなゲームをプレイしてもらいたいという欲求がわき上がってこないだろうか。

ここで、Mono for Androidの存在を思い出してほしい。

Mono for AndroidはMonoTouch同様、C#でAndroid向けのアプリが開発できるキットである。
そしてMonoTouchと同じOpenTKを使ってOpenGLをラップしているので、CocosNet実装もほとんどそのまま流用できるはずだ!
つまりはビューへのバインド部分だけそれぞれのプラットフォーム向けに書いてやれば、Cocos2Dの機能がiOS/Android双方で同じように使えるようになるはずなのだ!!
※ただし未検証でありライセンスにも注意する必要がある。

と、ちょっと投げっぱなしスープレックスな結びになってしまいつつあるが、C#で書けることによる開発効率の飛躍的なアップに加え、マルチプラットフォーム展開が容易になるというメリットがお分かりいただけたのではないかと。

Objective-Cは言語的にノイズが多すぎてどうも…. という諸氏にも強くお勧めできる、C#によるスマホアプリ開発。スマートなアプリをスピード開発してみてはいかが!?

さいごに

明日は@M_Sakodaさんです。
よろしくですー。

2011/6/1 水曜日

MonoTouchからWCFを利用する

このエントリをはてなブックマークに追加
Filed under: .NET,iPhoneアプリ,IT系,MonoTouch — @ 17:09:58

MonoTouchからWCF(Windows Communication Foundation)を利用するための方法を、これが結構苦労したのでまとめておく。

WCFを使えばサーバの機能呼び出しを抽象化して扱えるので、開発効率を大きく向上できる。
またせっかくC#を使っているのだから、サーバサイドも.NETテクノロジにしておけば、ソース共用もしやすくなってなお効率よし。

今回はWindows Azure上のWCF Webロールで動作させてみたが、通常のWCFでも同様に動くはずだ。

おおかたの手順は、MonoTouch公式の資料が参考になる。 (続きを読む…)

2010/4/14 水曜日

MonoTouchでビューのアニメーション

このエントリをはてなブックマークに追加
Filed under: .NET,iPhoneアプリ,MonoTouch — @ 16:42:41

今回はUIViewのアニメーション機能を使ってみる。

前回のプロジェクトに、UIImageViewへのアウトレット接続と、アニメーションのトリガーを与えるためのボタン配置・アクションの記述までを行う。
アウトレット名をimageView、アクション名をAnimationTouchedとしておく。
mt04-01.png

mt04-02.png
mt04-03.png

続いてアニメーションのコードを記述。
AnimationTouchedメソッドを実装するのだが、ここはMonoDevelopのコード補完機能を使うのが吉。冒頭の「partial(スペース)」までをタイプした時点で候補がドロップダウン表示されるので、適切に選んでEnter。
mt04-04.png

1
2
3
4
5
6
7
8
9
10
11
using System.Drawing;       
 
partial void AnimationTouched( UIButton button ) 
{ 
    UIView.BeginAnimations( "" ); 
    UIView.SetAnimationDuration( 1 );               
 
    this.imageView.Frame = new RectangleF( 100, 400, 50, 30 );               
 
    UIView.CommitAnimations(); 
}

上記のコードをタイプして実行。
(RectangleFの名前空間が見えていない可能性があるので、その場合はソース冒頭にusingの追加を。)
ボタンをタップすると、画像がずわっと下のほうへ縮むはず。
mt04-05.png

UIView.BeginAnimations()からUIView.CommitAnimations()までに記述した内容を、アニメーションする。
内部で記述しているのはたった2項目。
UIView.SetAnimationDuration()でアニメーションを行う時間、この場合は1秒間に指定する。
動かしたい対象はimageView。それのFrame属性をコードの通り設定している。
これにより、imageViewは現在位置から指定された位置まで、1秒間かけてスムーズにアニメーションしてくれる。

非常に簡単にアニメーションできてしまった。

2010/4/11 日曜日

MonoTouchがんばれ

このエントリをはてなブックマークに追加
Filed under: MonoTouch — @ 13:27:22

iPhoneOS4.0にともなうライセンス条項改悪に伴って、MonoTouchの販売元であるNovellからリリースが発表されていた。
http://www.mono-project.com/newstouch/archive/2010/Apr-09.html

以下、意訳。

これは、NovellにおけるMonoTouchチームから、MonoTouchコミュニティへのアップデートです。

This is an update from the MonoTouch team at Novell to the MonoTouch community.

多くの方が、iPhone Developer Program規約の変更について、私たちにコンタクトをもってきました。私たちが秘密協定についてコメントできない間に、いくつかのポイントの解決について取り組みたいと思います。

Many have contacted us about reports on the changes in the iPhone Developer Program Agreement and while we can not comment on the specifics of a confidential agreement, we want to address some of the points that are being brought up.

私たちは、MonoTouchは感動的な価値をアップルのエコシステムにもたらすと信じています。

We believe that MonoTouch brings an impressive value to the Apple ecosystem.

MonoTouchのC言語によるランタイムは、ネイティブコードのパワーとアップルのiPhoneOS APIに、タイプセーフ、自動メモリ管理、そしてISO Common Language Infrastructureが長年もたらしたイノベーションであるさまざまな利益を統合します。

MonoTouch’s C-powered runtime blends the power of native code and Apple’s iPhoneOS APIs with type safety, automatic memory management, and other benefits that years of runtime innovation have delivered to the ISO Common Language Infrastructure.

私たちはアップルと連絡をとり、彼らの意思を明確にしようと試みています。4.0SDKの最終的なリリースの前に、多くの軌道修正の余地があると信じています。

We are reaching out to Apple for clarification on their intention, and believe there is plenty of room for course-correction prior to the final release of the 4.0 SDK.

MonoTouchのプログラミングモデルにより、C#開発者は、Objective-Cの開発者と同じコントロールとアクセス性でiPhonOS APIに触れる事ができます。

MonoTouch’s programming model exposes the iPhoneOS API to the C# language to give developers the same control and access that Objective-C developers get.

アップルの動機が技術的あるいはアップルツールチェインの使用を確実にすることを意図するなら、MonoTouchがSDKの条項を遵守するのにそれほど苦労はしません。MonoTouchはMac OS Xでのみ動作し、XCodeとiPhoneSDKにしっかりと統合します。MonoTouchによりビルドされたアプリケーションはネイティブアプリケーションであり、通常のネイティブアプリケーションからは見分けがつきません。またアップルの公式APIとのみリンクされ、厳密なテストスイートがiPhoneOSのABIとAPIに従っている事を保証しています。

If Apple’s motives are technical, or are intended to ensure the use of the Apple toolchain, MonoTouch should have little difficulty staying compliant with the terms of the SDK. MonoTouch runs only on Mac OS X, and integrates tightly with XCode and the iPhone SDK. Applications built with MonoTouch are native applications indistinguishable from native applications, only expose Apple’s documented APIs and uses a rigorous test suite to ensure that we conform to the iPhoneOS ABIs and APIs.

これらをふまえて、MonoTouchチームは、エンタープライズやAppStore配信のためiPhoneやiPad向けに開発されたアプリケーションに、いまでも興奮を覚えています。iPhoneOS 4.0をサポートするMonoTouchはまもなくです。

With this in mind, the MonoTouch team remains excited about the potential for Enterprise and AppStore-deployable applications developed for the iPhone and iPad. Support for iPhoneOS 4.0 on MonoTouch will be arriving soon.

MonoTouchチームがんばれ。Novell超がんばれ。

2010/3/30 火曜日

MonoTouchで画像なんかをリソースとして使う場合の注意点

このエントリをはてなブックマークに追加
Filed under: .NET,iPhoneアプリ,MonoTouch — @ 22:21:44

画像などのリソースファイルをフォルダ分けして整理する場合、「Resources」という名前を付けてはいけない。
この名前のフォルダ以下にコンテンツ設定にした画像ファイルなどを配置していると、シミュレータや実機への転送ができない模様。

これまめ知識なー。

mt03-01.png

mt03-02.png

Pages: 1 2 Next

HTML convert time: 1.089 sec. Powered by WordPress