PlayStation Mobileプログラミング part 4at GAMEDEV
PlayStation Mobileプログラミング part 4 - 暇つぶし2ch2:名前は開発中のものです。
12/10/12 21:34:22.47 1AiKU+Yo
>>1


3:名前は開発中のものです。
12/10/12 22:00:43.55 PxdDNN5w
ラストスパートだ! 頑張るぞ!

4:名前は開発中のものです。
12/10/12 22:48:28.46 dqN7X24j
俺の日曜プログラマレベルのクソゲの審査が通るかが問われる

5:名前は開発中のものです。
12/10/13 01:03:52.90 OdmSeH6u
>>1

6:名前は開発中のものです。
12/10/13 15:03:24.00 VfQEexjK
昨日に引き続きで申し訳ありませんが別スレッドでのオブジェクト生成が上手くいきません…orz。

var task = Task.Factory.StartNew( ()
{
   Console.WriteLine (0);
   Obj =new Obj();
   Console.WriteLine (1);
});

これ書いても下のWriteLine動かないし、別スレッドでnewするとそこで途切れるっぽいんですがどういうことでしょうか?
普通にint a=0;から
var task = Task.Factory.StartNew( ()
{
   Console.WriteLine (a);
   a=1;
   Console.WriteLine (a);
});
なら全部動くけど
var task = Task.Factory.StartNew( ()
{
   Obj =new Obj();
   Console.WriteLine (a);
   a=1;
   Console.WriteLine (a);
});
これだと動かなくなっちゃう。

7:名前は開発中のものです。
12/10/13 15:10:35.43 zi3kd8HN
var task = Task.Factory.StartNew( () =>
{
   Console.WriteLine (0);
   var obj =new object();
   Console.WriteLine (1);
});
while(true){}

下にこういうのを書いてみたら?

8:名前は開発中のものです。
12/10/13 15:28:53.46 9AMMz6DV
PCだと普通に動くが、VITA実機だとダメなんだろうか・・・
Objクラスが悪さしてるとか?

9:名前は開発中のものです。
12/10/13 15:46:12.22 VfQEexjK
>>7
下のwhileループはどういうことでしょうか?
一応ゲームループ内なので、メインスレッドが先に終了してるということではないとは思います。
>>8
自分はPCでも動きませんでした。
ちなみに作ったObjはNodeを継承したGameEntityを継承したクラスでした。

10:名前は開発中のものです。
12/10/13 15:47:23.59 zi3kd8HN
>>9
var task = Task.Factory.StartNew( () =>
{
   Console.WriteLine (0);
   var obj =new object();
   Console.WriteLine (1);
});

これは動くの?
動くんだったらObjクラスのコンストラクタが原因でしょう

11:名前は開発中のものです。
12/10/13 16:00:12.91 VfQEexjK
>>10
その状況では上のWriteLineは動いて下のWriteLineは動きませんでした。
指摘されて自分も自作Objのコンストラクタが原因だと思いましたので
間でListやRandom、Stopwatchとかnewしてみましたがその時は両方のWriteLineが動きました。
このことから自作Objのコンストラクタが原因ぽいです。ご指摘ありがとうございました。


12:名前は開発中のものです。
12/10/13 16:18:29.92 VfQEexjK
色々試しましたがTexture2Dのコンストラクタ重たいせいみたいです。
重たいから別スレッドで作成してメインスレッドに支障きたさないようにしたかったのに…。

13:名前は開発中のものです。
12/10/13 17:01:22.76 zi3kd8HN
Vistaなら実行停止でサブスレッドも止まるみたいだけど
Win7だと止まらなくてPSMスタジオ再起動するまでビルドでdll上書きするのが出来ない

OSの違いなのかなんなのかわからないけど同じプロジェクト2つのPCでデバッグしてるとそうなってる

14:名前は開発中のものです。
12/10/13 17:04:04.88 DsK/TsjO
>>12
試してないけど、ファイル読み込みは非同期を使わないと無理そうやね

15:名前は開発中のものです。
12/10/13 17:12:16.63 DsK/TsjO
ん?でもC#のスレッドってプライオリティが高いのに勝手に変わらないのか?
協調型のスレッド?Task.Factory.StartNewってスレッドとは違うのだろうか。

16:名前は開発中のものです。
12/10/13 17:58:01.86 DsK/TsjO
うーん、Task.Factory.StartNewだと、なんか動作が怪しいな・・・
if( 0 == _state ){           
 // 非同期読み込みスレッド作成    
 _loading = Task.Factory.StartNew(()=>{            
  ImageAsset image = null;     
  // 非同期読み込みで作成
  image = new ImageAsset("/Application/test.png",true);         
  // 完了までまつ
  // image.WaitForLoad()だと処理が終わってしまう??
  while( !image.Ready ){
  Thread.Yield();
  }     
  // ! ここで処理が終わってしまう??     
  _tex = image.CloneTexture();                
  // ImageAssetからキャッシュと削除
  image.UnloadFromCache ();
  image.Dispose();     
  // 以下必要なだけ繰り返す...
  System.Console.Write("Load Finish!\n");    
  });
 _state = 1;    
}else if( 1 == _state ){     
 // WaitForLoadかCloneTextureでIsCompletedがtrueに...
 if( _loading.IsCompleted ){       
  // タスク削除しておわり
  _loading.Dispose();
  _loading = null;    
  _state = 2;
 }else{
  System.Console.Write("Now Loading...\n");
 }
}

17:名前は開発中のものです。
12/10/13 18:14:05.99 DsK/TsjO
あ、分かった。メインスレッド以外でnew Texture2D("/Application/test.png", false);
やると例外発生して落ちる。

18:名前は開発中のものです。
12/10/13 18:21:14.32 zi3kd8HN
例外で落ちてたらすぐ気づくだろ・・・
テスト段階では変なとこで無駄にキャッチしないようにしとけ・・・

19:名前は開発中のものです。
12/10/13 18:25:07.51 VfQEexjK
今気づきましたけど実機起動、実機デバッグ起動だとちゃんとTaskでnew Texture2D("/Application/test.png", false);
できてるっぽいですね。最初の1回物凄いフレームスキップして二回目以降はちょっとですけど。

20:名前は開発中のものです。
12/10/13 18:26:37.21 DsK/TsjO
いやー、キャッチは1つもしてないんだぜ。
Task.Factory.StartNewは例外が発生しても、Task.IsFaultedがtrueになるだけで
例外エラーダイアログは出してくれないみたいだな・・・

21:名前は開発中のものです。
12/10/13 18:40:46.79 DsK/TsjO
うげ、マジだ。VITA実機だと例外発生しねぇ。

22:名前は開発中のものです。
12/10/13 19:05:49.07 DsK/TsjO
ImageAssetを使って、お手軽に非同期読み込みやるとしたらこんな感じか
VITA実機でもカクつくことはなかった

if( null == _asset ){
// 読み込み開始
if( null != _tex ){
_tex.Dispose();
_tex = null;
}
// 非同期読み込みで作成
_asset = new ImageAsset("/Application/test.png",true);
System.Console.Write("Load Start\n");
}else if (_asset.Ready ){
// 読込完了
// テクスチャ作成
_tex = _asset.CloneTexture();

// ImageAssetからキャッシュと削除
_asset.UnloadFromCache ();
_asset.Dispose();
_asset = null;
System.Console.Write("Load Finish\n");
}else{
// 読み込み中
System.Console.Write("Now Loading...\n");
}

23:名前は開発中のものです。
12/10/13 19:53:29.52 OdmSeH6u
テクスチャ以外も非同期読み込みできるようにファイル読み込みを別にしてTexture2D(byte[] fileImage, bool mipmap)の方を
使ったほうが良くないか。と通りすがりが言ってみる。ただ上記のほうがお手軽だね

24:名前は開発中のものです。
12/10/13 20:15:49.76 a2qcLl2w
ファイルを非同期でロード出来るようにしよう(・∀・)

アーカイブしたファイルも対応したいな(・∀・)

圧縮したファイルもロード可能にしよう(・∀・)

デバッグ中はソケット経由でPCからVITAにファイルをロード出来るようにしよう(・∀・)

ファイルロードライブラリ完成(・∀・)パンパカパーン

25:名前は開発中のものです。
12/10/13 20:22:31.90 Vd6hRuYE
そこまでやったらすごいなw

26:名前は開発中のものです。
12/10/13 20:56:48.30 OdmSeH6u
本気でやるならリソースをほとんどアーカイブにして上記の実装したほうがいいけどなw
まぁ本当にそれが必要がどうかという問題だな。長い目で見たらやったほうが勿論いい
(XNAでも使えるかな?)
てかそうか、ソケット経由という手があったか。それができたら開発が捗るな。さんくす

27:名前は開発中のものです。
12/10/13 21:00:10.29 VfQEexjK
ImageAssetなんて便利なもんがHighLevelUIにあったのか。


28:名前は開発中のものです。
12/10/13 21:09:32.03 a2qcLl2w
この機能はCRIのファイルマジックPROってのを見ると欲しくなるからね(´・ω・`)
URLリンク(www.cri-mw.co.jp)

29:名前は開発中のものです。
12/10/13 21:17:07.47 DsK/TsjO
そんな機能は標準で用意してくれよ

30:名前は開発中のものです。
12/10/13 22:35:27.08 VfQEexjK
Taskよりはデリゲードによる非同期呼び出しの方が軽いみたい。でもどうしても最初の1回目がスキップする。
そしてGameEngine2DのPlayerとかのnewがなんであんなに速いのよって思ってたらGameの
BuildTextureTileMaps()で一回読んでディクショナリーに登録してるのなw
もう俺も非同期なんて言わずにメインinitで読んじゃうぜ!


31:名前は開発中のものです。
12/10/13 22:46:15.44 OdmSeH6u
ぶっちゃけ最初に読み込んでメモリに乗っかるようならそれでいいと思うんだぜ

32:名前は開発中のものです。
12/10/15 16:14:07.06 kGBPsunN
GameEngine2Dのサンプルのサポートクラス読み込んでたけどシェーダーとかOpenGL部分がまったく理解できないw
サポートクラスの使うとこだけ取り出して使おうかな…

33:名前は開発中のものです。
12/10/15 19:54:55.55 HUuA17zm
トロフィー整備という事はフレンドの呼び出しも来るか

34:名前は開発中のものです。
12/10/15 22:02:06.00 I2DCqBIg
フレンドを呼び出して説教するアプリの登場が待たれる

35:名前は開発中のものです。
12/10/16 09:48:28.83 fPXS3jn6
PSモバイルってPS3やVitaみたいなトロフィーを付けることって可能なん?

36:名前は開発中のものです。
12/10/16 13:21:27.62 C/9chZfx
可能らしいわよ

37:名前は開発中のものです。
12/10/16 13:26:46.03 pzXRyKJl
2chねるに書き込んだ ブロンズトロフィー獲得


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch