どうもよろしくお願いします。
現在、携帯アプリでゲームを作るに当たって、タスクシステムでも作ろうかと思っています。
私は、C++で、タスクシステムを作った経験があります。
それで、今回の問題点なのですが、C/C++には、関数ポインタがありますが、Javaにはありませんよね?
携帯アプリ向けなので、Verctorクラスと、タスクのInterfaceでも
作れば、複数のタスクを管理することは出来そうです。
ですが、関数ポインタが無いので、タスクチェンジをどうすれば良いだろうか?と疑問に思っています。
タスクの状態変数を用意して、
switch文を使って、実行関数を処理分けすれば、いい話ですが、
これだと、せっかくのタスクシステムの恩恵があまり得られないような気がします。
メインループ内が、Verctor配列で、スッキリするだけでも意味はありますが、タスクチェンジもシンプルにしたいと思っています。
何か良い方法がありますでしょうか?
よろしくお願いします。
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
javaで関数ポインタはインタフェースと実装クラスを使って表現します。
この例ですと、タスクのInterfaceの実装クラスが関数ポインタを持っていればいいので、javaで実現するにはタスクのInterfaceの実装クラスが「関数ポインタを表すインタフェース」を格納できるフィールドを持っていればいいわけです。このフィールドには、関数のポインタの代わりに、「関数ポインタを表すインタフェースの実装クラスのインスタンス」、をセットします。これは、デザインパターン的には、GoFのStrategyパターンになると思います。
11th_styleさん。こんにちは。
回答して頂きありがとうございます。
Strategyパターンですね。
参考になりました。
1.まず、関数ポインタを表すインターフェイスを定義する。
2.そして、それをインプリメントしたクラスの、メソッドとして
実行関数を定義するといったところでしょうか?
3.さらに、タスクを表すクラスの中で、
「関数ポインタを表すインタフェースの実装クラスのインスタンス」
を差し替えて、実行するんですね。
ありがとうございました。
No.1
- 回答日時:
リフレクションを使えばできるのではないでしょうか。
bgbgさんも回答して頂きありがとうございます。
リフレクション、
確かに面白そうなクラスです。
ただ、残念ながら、携帯アプリ(DocomoとかSoftBankの)なので、
J2SEが、そのまま使えずに、そのサブセットである
J2ME CLDCのクラスライブラリしか使えませんよね。
CLDCのリファレンスで調べてみると、java.lang.reflect
は、どうやら無さそうです。
でも、J2SEを使える環境の時には、
リフレクションを使う選択肢もありそうです。
今回は、お付き合い頂きありがとうございます。
それでは、これにて失礼します。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【C#】クラスのコンストラクタ...
-
interface,extend,implementの...
-
デバッグ時に「Source not found」
-
setTextについて
-
抽象クラスをJUNITでテストする...
-
抽象クラスとインタフェースの...
-
Excel vbaのプログラムでガンマ...
-
VB DLLプロジェクトについて
-
cocoa、objective-cのクラスを...
-
インタフェースのstatic変数(Java)
-
インナークラスについて
-
単体テストのテストケースにて...
-
C#からDLLを呼びたいのですが・...
-
タイマーの作り方
-
Java StringBuilderクラスについて
-
肥大化した実装クラスを分割す...
-
インターフェースとは
-
Javaの自作例外クラスについて
-
javaのabstractの意味
-
インターフェース型の使い方が...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「ラッパークラス」の存在意義...
-
C# 「データが失なわれる可能性...
-
VB DLLプロジェクトについて
-
抽象クラスをJUNITでテストする...
-
「継承されたメソッドの可視性...
-
インターフェースとトレイトっ...
-
c++でのヘッダーファイルの循環...
-
JavaでのAPIの覚え方ってみさな...
-
(vba)他のアプリケーションの右...
-
ASP.NETでの共通コードの書き方...
-
なぜForm型にキャストするので...
-
vb.net 自作プロパティの削除に...
-
【C#】クラスのコンストラクタ...
-
委譲って何ですか?
-
interface,extend,implementの...
-
Javaのインスタンス化の構文の...
-
オーバーライドとラッパーの違い
-
Commons-Discovery.jarとは?
-
JTextFieldの入力制限
-
C#からDLLを呼びたいのですが・...
おすすめ情報