iモード携帯電話用Java(iアプリ) Part15at TECH
iモード携帯電話用Java(iアプリ) Part15 - 暇つぶし2ch24:デフォルトの名無しさん
07/08/24 17:22:06
え、ちょっと意味が解らんのだけど

俺はタイマ解像度1000msだったら、
1000ms以下は入れても無駄というか正確に測れない
ってことだと思ってた

25:デフォルトの名無しさん
07/08/24 17:23:15
ハードが十分に速ければそこまで気にする事じゃないんだろうけどなw

26:デフォルトの名無しさん
07/08/24 17:27:34
>>24
携帯内で1個だけ動いてる解像度1秒の時計をみんなで見てるなら、
秒が切り替わった直後に1秒スリープすると、
次に変わったって気づけるのは約2秒後って話じゃね?

動けば良いやで作ってるから、間違ってたらゴメンw

27:デフォルトの名無しさん
07/08/24 17:29:31
結局sleep関数の精度はタイマ解像度には依存せず全端末1msが保障されてるということでいいの?

28:15
07/08/24 17:33:30
俺もだんだん混乱してきた。

>>20
>タイマ解像度1000msの端末が有ったとして、
>0.5秒目でsleep(1)したら1.5秒までsleepすると思ってない?
この場合は、2.0秒までsleepするであってるよな?

29:デフォルトの名無しさん
07/08/24 17:36:42
>>28
あってるよ

30:デフォルトの名無しさん
07/08/24 17:40:39
え、全然解らん
こういうもんだと理解してたんだけど

sleep( 1000 )で呼び出したとする
 ↓
スリープを開始
 ↓
タイマーを見て現在時刻を取得(多分ミリ秒単位)
 ↓
以降、一定時間ごとに時刻を取得して比較
現在時刻から1000ミリ秒以上経ってたらスリープ解除

この一定時間がタイマ解像度だと思ってた

31:デフォルトの名無しさん
07/08/24 17:43:14
それでいいんじゃね?

32:デフォルトの名無しさん
07/08/24 17:49:15
ということはタイマ解像度が100msの端末の最大FPSは10ということになるんでしょうか

33:デフォルトの名無しさん
07/08/24 17:53:04
え?なんで?

34:デフォルトの名無しさん
07/08/24 18:02:36
>>33
おげ、違うのか・・・?
タイマ解像度=100msとして

0ms(開始)
処理(20msかかった)
20ms
sleep(1)←タイマ解像度100msなので(1)でも100msまで進んでしまう
100ms
処理(50msかかった)
150ms
sleep(1)←タイマ解像度100msなので(1)でも200msまで進んでしまう
200ms

結局10FPSにならんの?

35:34
07/08/24 18:07:35
すまん…sleepの理解は34でいい?として
FPSを上げたければsleepいれなきゃいんだよね

36:デフォルトの名無しさん
07/08/24 18:09:17
あ、なるのかも?
もう混乱してワケワカラン

37:デフォルトの名無しさん
07/08/24 18:31:55
タイマ解像度100msということは、100msに一度タイマ割り込みが
発生するということ。
>>34の例では、20msのあとでsleep(1)をした場合、sleepが終了
するのは、割り込みのタイミングに対してどの時点で命令を発行
したかに依存するので、待ち時間は1~100msのいずれか。

ごめん、うまく説明できないな。

38:デフォルトの名無しさん
07/08/24 20:16:13
>>35
基本的にはそれでOKだと思う。
ただ、液晶画面の応答速度を考えると
sleepを削除しても、1000FPSとかはでないと思わr。

39:デフォルトの名無しさん
07/08/24 20:16:52
>>34 の例でいうと、開始の時点で携帯のタイマが 0ms にリセットされるわけではないから、

90ms(開始)
処理(20msかかった)
110ms
sleep(1)
200ms

かもしれないし、

40ms(開始)
以下略
処理(20msかかった)
60ms
sleep(1)
100ms

かもしれない。結局10FPSになるのは、まぁたぶんそうかもしれんが、保証はない。
sleep(1) は、最低 1 ミリ秒以上スリープする、というだけで、上限は定められてない。

40:デフォルトの名無しさん
07/08/24 23:12:52
sleepは落ち着いてきたからいいよな。>34が正解。
で、FPSの話に移るとして、大前提。

・FPS固定する理由が端末毎の処理速度差を吸収する目的であるとする。

とした場合、sleepがあろーとなかーと、他の部分を考慮しないとダメ。
他の部分ってのは、『処理が早すぎた場合』と『処理が遅れた場合』。

>>19 と前スレの >>993 のFPSクラスの場合、
早すぎた場合に関してはsleepで待っているので問題ない。
問題なのは『処理が遅れた場合』の方で、
メイン処理や描画が 1000/フレーム数ms 以上の場合に遅れを取り戻せない。
レースゲームなんかじゃ致命的で、
遅い端末と早い端末が同時にレーススタートすると、遅い端末が後でゴールする。

>backTime = System.currentTimeMillis();
ここを
backTime += waitTime;
とすれば軽い時にそのうち追いつくけど、追いかけてる最中高速アニメーションw
まだ遅れっぱなしの方がマシってくらい有り得ない。


41:デフォルトの名無しさん
07/08/24 23:18:06
FPS(あくまで全端末の処理速度)を一定に保つ方法はいくつかあるけど、
ここいくつかのレスを見る限り、
前スレ999のみが早すぎるケースにも、遅すぎるケースにも対応してる。
例え描画が1,2フレーム落ちても、mainLoop関数は秒間平均20フレーム回るので、
pos +=speed; と書いてあっても大丈夫。
ただ、999にも書いてあるけど長時間サスペンドや、
ダイアログでmainLoopを止めると対処がムズイ。

他は遅れっぱなしになるか、以下の制限付ければFPS固定になる。
・どんなに遅い端末でも、1フレームあたり1000/フレーム数ms 以上の時間が
 かからないようにする。(最悪、遅い端末にフレームレートをあわせる)
・座標計算をこんな感じで…かなり面倒。
 pos += (System.currentTimeMillis()-time) * speed / FLAMERATE;
・遅い端末は忘れる


で、話を戻してsleepが有るとか無いとか言ってる人。
タイマ解像度は currentTimeMillis() にも影響するので、実はあまり意味ない。
sleep使わないメリットは、sleepに与えた時間以上に休むのを防ぐことができるくらい。


42:デフォルトの名無しさん
07/08/24 23:55:17
タイマ解像度ってTimer#getResolution()のことで合ってる?
getMinTimeInterval()の話が出ないのも引っかかるんだが、
気にしなくていいのかな。

43:デフォルトの名無しさん
07/08/25 21:51:05
うん、論外。

44:デフォルトの名無しさん
07/08/26 00:33:18
iアプリベンチはgetResolution()の値を取ってなかったっけ?

45:デフォルトの名無しさん
07/08/27 10:54:13
>>44
25msとかで記述するのが面倒だから
1000msなり100msで具体的にどーなるかを議論している訳で、
iアプリベンチの値が実際のタイマ解像度と異なったとして、
上の議論には何の影響も無いでしょ。

どんなタイマ解像度の機種であっても、FPS固定できる事が理想なんだし。


46:デフォルトの名無しさん
07/08/27 14:27:14
>>45
"FPS"って何だか分かってる?

47:デフォルトの名無しさん
07/08/27 15:20:14
流れ切ってすまん。
マスコットカプセルは右、下、奥が正の値の右手座標系って公式資料に書いてるけどこれって一般的?
俺は右手座標系というと右、上、手前が正だと思ってた。

48:デフォルトの名無しさん
07/08/27 15:26:12
それは数学

49:デフォルトの名無しさん
07/08/27 15:39:05
>>47
マスコットカプセルが特殊、あなたが正常

50:デフォルトの名無しさん
07/08/27 15:53:08
>>45
だからその「実際のタイマ解像度」って何かなと思ったのよ。
System#currentTimeMillis()の戻り値が常に一定間隔であることが
すべての機種で確認されてるの?
Thread#sleep(1)を100回繰り返したらタイマ解像度×100の時間が経過するの?

納得して議論してるなら横槍入れてごめん。

51:デフォルトの名無しさん
07/08/27 16:24:58
別にいいじゃん、そんなに厳密じゃなくても動くんだし。

と思ってみたが、それを理由にして
パチスロアプリの仕事を断ったような覚えがあったw

パチスロってボタン押してから何ミリ秒以内に停止しないと
いけないとか法律で決まってるんだよね。

52:デフォルトの名無しさん
07/08/27 18:47:30
そもそもは、前スレ>>999で投下されたソースに対して、ウェイト部分に
sleep(1)=タイマ解像度よりも低い値を指定しているのでは正しく動作
しないのでは?という疑問から始まった話。
実際の動作は、タイマ解像度の性能が許す限り最良の待ち時間だけ待って
くれるので>>999のソースは少なくとも間違っていないっしょ。

で、途中から可変FPSにして見かけ上の動作速度を同じにするような、一昔前の
リフレッシュレートに関する論争みたいな話がでてきてどんどん脱線している
気がする。タイマの説明については>>37の解説がハードウェア的にはあってると
思われ。

53:デフォルトの名無しさん
07/08/27 19:15:05
> タイマ解像度の性能が許す限り最良の待ち時間だけ待って
sleepでしょ?最良ねぇ...

54:デフォルトの名無しさん
07/08/27 21:42:46
タイマー関連について検証アプリを書いてみた。
FPSの議論とは直接関係ないので興味のある人だけどうぞ。
URLリンク(akizakura.dyndns.org)
QRコード URLリンク(akizakura.dyndns.org)

D902iの場合
Timer#getMinTimeInterval() = 10
Timer#getResolution() = 10

System#currentTimeMillis()の間隔
min=1 max=1 avg=1.0

sleep(1) * 100 = 218ms.
sleep(2) * 100 = 314ms.
sleep(3) * 100 = 412ms.

iアプリベンチのタイマ解像度はTimerクラスを使わないかぎり
気にしなくていいのかもしれない。


55:デフォルトの名無しさん
07/08/28 10:25:14
iアプリでできるチェスってないかな
月額料金を払わなくていい売り切り、または無料で

将棋と比べるとほとんど見かけない

56:デフォルトの名無しさん
07/08/28 10:59:52
>>55
コード組む話じゃないのならその質問は板違い。

57:デフォルトの名無しさん
07/08/28 14:52:16
>>54

俺も試してみたよ。

N903iの場合

Timer#getMinTimeInterval() = 10
Timer#getResolution() = 10

min = 1
max = 10
avg = 1.01000908

sleep(1) * 100 = 100ms.
sleep(2) * 100 = 200ms.
sleep(3) * 100 = 300ms.

何回かやってみたけど、sleep(3) * 100 の結果に少しばらつきが有った。
316ms.とか。



58:デフォルトの名無しさん
07/08/28 18:46:01
>>57
sleep精度がすごくいいね
>>54のはsleep1回につき1ms程度のオーバーヘッドがある感じなのかな

59:デフォルトの名無しさん
07/08/28 19:58:36
だとすればsleepでタイミングを計る場合は
前スレ>>353みたいにするのがいいのかもな

60:デフォルトの名無しさん
07/08/28 20:13:25
sleepも自前waitも使わずタイマーで回してるのは俺だけで良い

61:デフォルトの名無しさん
07/08/29 13:48:39
やっぱタイマー精度もそうだけど全ての端末での動作を確認したい所だよね。
特にサウンド関連なんかはちゃんと鳴るか自分で確かめたいし…。

俺は知り合いから古い携帯をもらって900シリーズはある程度集めたんだけど
901以降ってなかなかくれる人いないんだよね。。
てか、携帯の白ロム?っていうのかな、中身空のやつって店に売ってる?

62:デフォルトの名無しさん
07/08/29 14:00:53
>>61
白ロム.com
URLリンク(www.sirorom.com)


63:61
07/08/29 17:00:50
>>62
サンクス。早速見てみた。
てか、白ロムってこんなに高いの??
てっきりワゴンセールみたいな感じで1000円くらいで売ってるのかと思った…

64:62
07/08/29 17:10:26
白ロム専用の販売サイトはここ以外にもいくつかあるけど
基本的に値段はあまりかわらない。
アプリ開発する会社とかが普通に購入するから
この値段で売っているんだと思うよ。

65:デフォルトの名無しさん
07/08/29 17:54:20
docomo使ってる友人知人に使わない携帯クレクレしてれば案外集まってこない?

NとかPとかNとかPとかn ('Д'#)イラネーヨ

66:デフォルトの名無しさん
07/08/29 20:03:14
>>65
いらないならくれ!
まあヤフオク利用する手もあるわな。

67:デフォルトの名無しさん
07/08/29 21:28:10
ヤフオクって取引の半数が詐欺か犯罪かヤフー社員の息が掛かってる怪しい取引じゃん・・・

68:デフォルトの名無しさん
07/08/29 23:49:01
>>65
最近元カノと出かける用事があって携帯買い換えたらクレって言ったんだけど
「あんたデータ消しても蘇らせそうだから嫌」って言われたw

でも確かにヤフオクは怖いなぁ。。
とりあえず俺が集めたのは…
P900iv N900i D701i
って、3つしかないやんけw
まぁでも、あとSOとSHさえGETすればメーカーごとのwav確認は出来るからよしとしよう。
つーか、秋葉行けば手に入る?1000円くらいで買えるなら上京してでも…


69:デフォルトの名無しさん
07/08/30 02:19:32
>>47
プログラマの常識的には右、上、手前=OpenGLで一般かもしれんが、
これもOpenGL以外にはそうないし一般的かは疑問。
モデルツールはツールで軸方向はいろいろ違うしさ

70:デフォルトの名無しさん
07/08/30 05:44:18
2D画面のX軸とY軸に合わせて、あと画面の奥に向かってZ軸を伸ばしてるんだろ。
ぶっちゃけ発想が古いと思うが、MascotCapsuleの出自を考えるとそんなもんじゃね。

俺はOpenGLが公開されるまで3Dゲーム作らんつもりなのでどうでもいい。

71:デフォルトの名無しさん
07/08/30 09:54:18
>>70
なるほど。
すげー納得した。
その発想は出来なかった。

72:デフォルトの名無しさん
07/08/30 10:28:40
>>67
2chのカキコの半数は嘘と煽りの怪しいサイトでしょw
要は使いよう。


73:デフォルトの名無しさん
07/08/30 11:25:09
>>69
右手座標系の意味をわかってて言ってる?

74:デフォルトの名無しさん
07/08/30 11:37:17
質問させてください。

void send() {
  clearKeyState();
  for (;;) {
    repaint();
    Thread.sleep(50);

    int key = getKeyState();
    if (key == Display.KEY_SOFT2) {
      drawString("認証中", 50, 110);
      //通信処理
      //通信結果表示
    }
  }
}

このような処理を作成したのですが、思い通りに動作しない
場合があります。

やりたいこと:通信処理中はずっと画面に"認証中"と表示させたい。
問題点:たまに(2割位の確立で)"認証中"が表示されるも一瞬で消えてしまう。

・通信処理は実機,エミュレータ共に2秒くらい。
・"認証中"が一瞬で消えてしまったときでも通信処理自体は正常に動作している。
・repaint()ではダブルバッファリングを使用。

お分かりの方おりましたら、アドバイスよろしくお願いします。

75:デフォルトの名無しさん
07/08/30 12:20:57
そもそも、そのコードだとソフト2キーを押してる時だけ認証中って
表示される気がするんだけど

76:デフォルトの名無しさん
07/08/30 12:50:20
"認証中" って描画するための Graphics はどこから?

77:デフォルトの名無しさん
07/08/30 12:53:42
>>75
通信処理のところでブロックして、forループ回らずにいるんじゃないの?
どちらにしろ通信結果表示のところも怪しい。中でループしてんのかな。
それとも画面を背景色とかでフラッシュしてない?

通信が思ったより早く終わったとかそんなんじゃないのかね。
一瞬だけ表示されるのが嫌なら、最低何秒は表示させるって処理を
追加してはどうだろう。

78:74
07/08/30 12:58:15
>>75さん、ご意見ありがとうございます。
すいません、説明不足でした。
getKeyState()等は以下のメソッドを記述していました。

int keyParam = -1;
public void processEvent(int type, int param) {
  if (type == Display.KEY_PRESSED_EVENT) {
  keyParam = param;
  }
}
//キー状態の取得
int getKeyState() {
  int ret = keyParam;
  keyParam = -1;
  return ret;
}
//キー状態のクリア
void clearKeyState() {
  keyParam = -1;
}

申し訳ありませんが、あらためてアドバイスよろしくお願いします。

79:デフォルトの名無しさん
07/08/30 13:13:10
>>78
通信処理は別スレッドで行ってる?

80:74
07/08/30 13:51:36
74です。
皆様からの貴重な意見ありがとうございます。
あきらかに情報不足のようですので、長々となってしまいますが
具体的にコードを乗せさせていただきます。

Graphics g;
//コンストラクタで G=getGraphics()を使用
void send() {
  clearKeyState();
  for (;;) {
    repaint();
    Thread.sleep(50);
    int key = getKeyState();
    if (key == Display.KEY_SOFT2) {
      drawBox("認証中", 30, 100, 120, 60); //通信中
      //通信処理メソッド
      drawBox("結果", 20, 90, 140, 80); //通信結果
      ctl;
    }
  }
}

//ボックス表示
void drawBox(String str, int x, int y, int col, int row) {
  g.setColor(ピンク);
  g.fillRect(x, y, col, row);
  g.setColor(白);
  g.drawString(str, ボックス中央);
  g.setColor(黒);
}


81:74
07/08/30 13:54:40
続きです。

//セレクトキーを押したら終了
void ctl() {
  for (;;) {
    int key = getKeyState();
    if (key == Display.SELECT) {
      return;
    }
  }
}
//ペイント
public void paint(Graphics g) {
  //起動直後にpaintが呼ばれても大丈夫にする
  if (state == 0) {
    return;
  }
  this.g = g;
  g.lock();
  drawhaikei();
  g.unlock(true);
}
//画面描画
void drawhaikei(){
  //画面初期化
  g.setColor(黒);
  g.fillRect(画面全体);
  //以降描画処理
}
だいぶ長々と書いてしまい申し訳ありませんが、よろしくお願いします。

82:デフォルトの名無しさん
07/08/30 14:19:55
描いてないから描かれてないんだろ。

以上。

83:デフォルトの名無しさん
07/08/30 14:24:28
>  this.g = g;

なんだこれは

84:デフォルトの名無しさん
07/08/30 14:26:19
ctl()から抜け出せてないんじゃないの?

85:デフォルトの名無しさん
07/08/30 14:28:21
>>83
それはdrawhaikei()で使うためじゃないかな
引数で渡せばいいと思うけど

86:デフォルトの名無しさん
07/08/30 14:35:11
とりあえずだいぶ設計に問題があるな

87:デフォルトの名無しさん
07/08/30 14:38:20
drawhaikeiで使うだけならいいけど、たしか"認証中"を描画するためにコンストラクタで初期化してるとか言ってなかったか

88:デフォルトの名無しさん
07/08/30 14:47:37
drawBox("認証中", 30, 100, 120, 60);のあと
再描画しないで通信処理開始してるからじゃないの?

2割くらいの確率で描画されることもあるってのは
システム側が通信開始までの微妙なタイミングで(repaint要求なしでも)たまたま描画しただけで。

一瞬描画されても消えるってのは
paint()が実行されたときdrawhaikei(){}内のg.fillRect(画面全体);のとこで消しちゃってるからだろ。


プログラムの構造が変だよ。
drawBox()はdrawhaikei(){}内から呼び出すようにした方が
描画タイミングに一貫性があっていいと思う。

89:デフォルトの名無しさん
07/08/30 14:55:06
1.通信前
 repaint(); ←ここで通信前の画面が描画される

2.通信中、通信直後
 drawString("認証中", 50, 110); ←repaintが呼ばれてないので画面には反映されない。
 //通信処理
 //通信結果表示
 ctl(); ←ここまで、通信前の画面が表示されている。

3.通信完了後
 repaint(); ←ここで「認証中」が描画される
 Thread.sleep(50);
 ・・・

4.次のフレーム
 repaint(); ←「認証中」が消される

どの辺がダブルバッファなのかという質問は無し?


90:デフォルトの名無しさん
07/08/30 14:56:32
もしかして g.lock() → g.unlock(); これだけでダブルバッファリングになることしらない?

91:デフォルトの名無しさん
07/08/30 14:58:28
g.lock()してるあたりじゃまいか

92:74
07/08/30 15:04:07
74です。
皆様からのありがたいお言葉ありがとうございます。
というか毎回情報不足&ダラダラと長文で分かりづらくて申し訳ありません。
明らかに自分の知識および経験が不足しているので、皆様の意見を参考にして
暫くは自力で頑張ってみます。

本当にありがとうございました。

93:デフォルトの名無しさん
07/08/30 21:04:04
3Dのアプリを作ってみたいんだけど、簡単なサンプルみたいなやつって無いですか?
googleで探してもぜんぜん見つからないです

94:デフォルトの名無しさん
07/08/30 22:59:08
俺の親切なアドバイス:やめとけ

95:デフォルトの名無しさん
07/08/31 13:10:42
>>93
とりあえず、んぱか逝っとくといいよ
URLリンク(www.saturn.dti.ne.jp)

96:デフォルトの名無しさん
07/08/31 15:13:57
Doja5.0で、エミュ上でOpenGLのFloatMath使ってみたんだけど、
SecurityViolation: 37 <clinit> 0
と言われてしまいました。 エミュでもトラステッドじゃないとやっぱだめ?


97:デフォルトの名無しさん
07/09/01 10:46:46
トラステッド動作設定を忘れてるか
jamファイルにOpenGL使う設定を書くのを忘れてるか

どっちかじゃない?

98:デフォルトの名無しさん
07/09/01 16:52:46
10 print"ばか"
20 goto 10

画面中を「ばか」でいっぱいにするプログラムを組んだのですが
だめみたいです
どうすれば?

99:デフォルトの名無しさん
07/09/01 17:35:46
多分言語の問題。

100:デフォルトの名無しさん
07/09/01 20:25:03
他言語をずっとやってると、新しい言語を覚えてもどうしても前のに引きずられるよね

101:デフォルトの名無しさん
07/09/01 20:47:34
新しい言語に習熟してないうちはそうだね

102:デフォルトの名無しさん
07/09/01 21:27:26
PHP触ったあとにJavaを触ると、無意識のうちに変数に$をつけてしまう

103:デフォルトの名無しさん
07/09/02 00:20:47
if(a==1)を
よくif(a=1)と書いてしまう


104:デフォルトの名無しさん
07/09/02 08:23:21
if(a==1)ではなくて
if(1==a)と書くようにすると間違って
if(1=a)としても文法エラーになるからおk、と書いてある本を見た希ガス
でも著者も変態チックな記述法なので自分もやんないって書いてたな

105:デフォルトの名無しさん
07/09/02 08:34:42
変数同士の比較のつもりで間違えた場合には効果ないしね

106:デフォルトの名無しさん
07/09/02 09:53:04
>>103-104
Javaはそんな変なことをしなくてもif(a=1)の時点でエラーを返すはず

107:デフォルトの名無しさん
07/09/02 12:12:52
>>106
そうそう、ちゃんとエラーになるから大丈夫。
でもVBみたいに文法エラーがあると先に進ませてくれない言語はキツイ…
「後でまとめて直そうと思っとるんじゃぁ!」って画面にツッコミ入れそうになるもの。

ちなみに俺の場合はVBから入ってC++やってJAVAに入ったんだが、もうVB忘れたw
そしてVBに戻って勉強しなおすとJAVAを忘れる事だろう…

108:デフォルトの名無しさん
07/09/02 12:14:42
sony music soundをご覧になるにはUIDの取得が必要とか?
UIDってなんですか??

109:デフォルトの名無しさん
07/09/02 15:34:41
ここはアプリを作る側のスレ。
使う側はスレ違い。

110:デフォルトの名無しさん
07/09/03 10:14:47
ダウンロードした人にjamが置いてあるフォルダを知られたくないんですけど、
jamのアドレスって携帯から調べることできるんですか?

111:デフォルトの名無しさん
07/09/03 10:58:51
>>110
出来る。

112:デフォルトの名無しさん
07/09/03 11:48:35
>>111
どうやって調べるんですか?
アプリの詳細情報だとファイル名しか出てなくて・・・。

113:デフォルトの名無しさん
07/09/03 16:16:48
>>112
機種依存になるが過去の古い機種によっては
jamファイルのアドレスを表示する機種があった。
(503・504時代)
最近の機種はわからない・・自分の機種ではできんな。

114:デフォルトの名無しさん
07/09/03 21:27:16
Nの903、904は見れたはず

115:デフォルトの名無しさん
07/09/03 21:46:12
AppTrace=onなら見れる
offなら見れない
N503, 504は例外

116:112
07/09/03 22:49:33
情報ありがとうございます。
N902iでは見れないみたいです。(AppTrace=off)
903は白ロム買って確かめてみます。

117:デフォルトの名無しさん
07/09/04 02:17:56
jamの置いてあるフォルダを知られたくない理由が知りたいな
DirectoryIndex対策か?

118:デフォルトの名無しさん
07/09/04 12:19:47
>>97
遅レスすまん。
一応、iαppliTool for Doja-5.0 の『設定→トラステッド動作設定』 で、『OpenGl/ES機能の使用許可』をYesにしているけどだめです。
ADF設定のTrustedAPIDを入力しないとエミュでもだめなんですかね?勝手なんで、そんなものもらってないし。



119:デフォルトの名無しさん
07/09/04 12:37:12
エミュのTrustedAPIDは桁数だけ合わせて(11桁?)
適当なの突っ込んどけばOKだった気がする。

120:112
07/09/04 12:44:59
>>117
PCから見られるのが嫌なので。
レンタルサーバでhtaccess使えないんです。

121:デフォルトの名無しさん
07/09/04 14:42:38
>>120
CGIが使えるようならPerlとかPHPでリモートホスト見て
jamを吐き出すスクリプト書けばいいんじゃない?
有料のアプリなんかは課金チェックや機種判別も含めて
そういう手法取ってるから

122:デフォルトの名無しさん
07/09/04 14:55:35
>>119
マジで!?
ちょっと試して見るわ

123:デフォルトの名無しさん
07/09/04 15:04:13
jamのアドレスがバレると、リソースの場所も推測されてしまうことがあるから、見せない方がいい。
某ネットワークRPGアプリがAppTrace=onで出したから、シナリオが丸見えになった。

124:デフォルトの名無しさん
07/09/05 11:28:05
>>119
あ、うごいたっぽい。
ありがとう。


125:デフォルトの名無しさん
07/09/09 04:16:08
RSS読む用のXMLのパーサを今作ってるDoJaアプリにインポートしたいんだけど.
軽くてお勧めなのある?

126:デフォルトの名無しさん
07/09/09 22:31:26
教えてください。
アプリで画像表示中に音楽(3GP)ファイルを再生したいんですが、
AudioTrackPresenterで間違いないですよね?
エミュレータだと代替音楽のような曲が鳴るんですが、
実機だと何も鳴らない…
もちろんマナーモードではないです。

127:デフォルトの名無しさん
07/09/10 01:01:54
AudioTrackPresenterはオプションAPI
SH、D、Fのみ対応
非対応機種はUnsupportedOperationException

128:デフォルトの名無しさん
07/09/10 02:37:48
>>125
URLリンク(www.horobi.com)
を参考にして
URLリンク(kxml.sourceforge.net)
これを使ってる。

129:デフォルトの名無しさん
07/09/10 14:06:42
128を見ていて思ったけど、
BSDライセンスの場合は、サイト内のダウンロードページにライセンス条項を載せるだけでいい?

130:デフォルトの名無しさん
07/09/10 22:43:57
「いい」ってのがどういう意味かによる
もっと具体的に

131:デフォルトの名無しさん
07/09/10 23:24:01
>>127

ありがとうございます!
Nで試してました…
VisualPresenterを使うとすると、
ネイティブのプレイヤーが起動するから、
画像のバックで音楽再生はできないんでしょうか?

132:デフォルトの名無しさん
07/09/11 01:35:42
質問させて下さい!
当方ゲームを作っているのですが、サウンドのループでつまずいています。
canvasのクラスにMediaListenerをimplementsしているんですが
曲の再生が終わっても(その他再生を開始たりしても)mediaActionに処理が
飛んでこないんです…。
ソースの概要はこんな感じです。

class game1 extends Canvas implements MediaListener{
各種処理
game1(){
各種処理
オーディオプレゼンター.setMediaListener(this);
}
public void mediaAction(MediaPresenter source,int type,int param){
System.out.println("処理が来た!");
}
}

よろしくお願い致します。

133:デフォルトの名無しさん
07/09/11 01:55:48
>>131
3gp形式などは不可。
機種別のMFi形式を使うしかない。
>>132
参考例
URLリンク(iappli.kajas.com)

134:デフォルトの名無しさん
07/09/11 06:14:37
>>132
audio.setAttribute( AudioPresenter.SYNC_MODE, AudioPresenter.ATTR_SYNC_ON );
audio.setMediaListener( this );

audioは取得したAudioPresenter。
SYNC_MODEを設定しないと同期イベントは発生しないかと。



135:デフォルトの名無しさん
07/09/11 09:59:17
>>134
SYNC_MODEはあくまで同期であって、それを設定しないからといって
mediaActionに処理が来ないわけではない。
>>132はmediaActionに処理が来ないと言っている。

136:デフォルトの名無しさん
07/09/11 10:07:40
大方processEventでループしてたりするんじゃない?


137:デフォルトの名無しさん
07/09/11 12:52:40
サウンドデータの問題かもな
曲が終わってから5分くらいしないとそこに行かないデータが前にあった

138:125
07/09/11 14:19:40
>128

返事遅くて済まん
そのページは知ってたんだが,
2002年の報告だから今はどうなってるのかなぁと思って聞いてみた,
ともかくサンクス

139:デフォルトの名無しさん
07/09/11 22:57:50
>>126さんに便乗して質問なんですが、
ゲームの中で効果音(1秒くらい)として3gpを再生したいのですがなぜか
ap.play();をしてからどうしても1~2秒のラグが出てしまいます。
携帯はSH903iなんですが、携帯に問題があるのか、ファイルなのか
仕様なのか何なんでしょうか?

にしてもiアプリの音楽再生に関する詳しいページって少ないですね・・・。

140:デフォルトの名無しさん
07/09/12 01:29:15
play(1ミリ秒単位)を入れるのねんのねん。
そうすると()内に入れた秒数から音楽がスタートするから
タイムラグを解消できるのねんのねん。
機種依存命令だけど903シリーズなら大丈夫じゃまいか。

141:デフォルトの名無しさん
07/09/12 01:40:39
>>132
メディアアクションはpublic voidじゃ機能しないよん~~~
だってpublic voidは呼び出して機能させるしかないからねんのねん
public classを作ってメディアアクションさせなきゃだめよ。
つまり別のclassを作るってことよ。わかったかしらあん~~~はあと

142:デフォルトの名無しさん
07/09/12 03:15:57
>>141
言ってる意味がよくわからんが、俺も>>136が怪しいと思う。
あるいは別のAudioPresenterをnewしていて、そっちでplay()してるとか?

143:デフォルトの名無しさん
07/09/12 06:18:58
流れを切ってすみませんが、ご助言願います
以下のように、イメージを右に移動させる処理を組んでいますが、
イメージの移動した跡に残像が残り続けてしまいます。

while(true){
g.lock();
g.drawImage(image, x, y);
g.unlock(true);
x++;
//スリープ処理
}

ループ中に、g.clearRect(0, 0, getWidth(), getHeight());を追加すると解決したのですが、
参考とさせて頂いたこちら(URLリンク(www.doja-developer.net))の
サンプルソースでは、このような処理は行われていないようです。
サンプルソースでは、特に明示的に画面のリフレッシュを行っていないようなのですが、
同じように組んでも残像が発生してしまう理由を教えてもらえないでしょうか?
よろしくお願いします。

144:デフォルトの名無しさん
07/09/12 06:24:08
>>141
MediaListener実装クラスがpublicじゃないと駄目ってことか?

145:デフォルトの名無しさん
07/09/12 06:28:37
>>143
描画前に画面をクリアないと前の画面にそのまま上書きするからそうなる
サンプルでは68行目のfillrectで画面をクリアしてる

fillrectはsetColorで指定した色で塗りつぶす
clearRectはデフォルトの背景色で塗りつぶす

146:デフォルトの名無しさん
07/09/12 07:25:27
>>145
即レスサンクス!
clearRectの先入観があってfillRectが目に入らなかった様です
要するに、実際のゲームアプリ等で応用する場合には
先に背景を再描画してしまって一度画面をクリアすれば良いわけですね

147:デフォルトの名無しさん
07/09/12 07:49:09
背景が部分描画なら、はみ出した部分クリアしないと残るけど
全画面背景描くならクリアする必要ない

っていうか背景描いた後に画面クリアしたら背景消えちゃうぞ

148:デフォルトの名無しさん
07/09/12 09:26:27
>147 多分意味は通じてると思うぞ
>146の頭の中では 背景を再描画する=画面をクリアする って意味なんだろう
まぁ>146の言い方が悪いんだけど初心者だしな

149:139
07/09/12 19:13:58
>>140
今ちょっと試したんですが、やっぱり開始は遅く音が途中から再生されただけでした。
そもそもこの音はwavで作ってSoundEngineで無音部分を完全に切り取り、
3GP Converterで変換してるので一応ファイルの中にラグは無いはずなんです。
ただ3GP Converterで最初やったときなぜかデータが途中までになってしまい、
しょうがなくwavのケツにちょっとだけ無音を足して、途中で切れても音は聞こえるようにした。
という経緯があるので、ここが怪しいかな・・・?とは思ってるんです。
誰か同じようなことあった人居ますか?


150:デフォルトの名無しさん
07/09/13 04:35:44
便乗で質問させていただきます.
>>128で紹介されているライブラリの
kxml2-min-2.3.0.jar
をDLし既存のDoJaアプリに追加してみたんですが,
追加下だけのときは問題ないのに,
実際参照すると,start()を内包するクラスが見つからないと
実行時エラーが起こり,
携帯のエミュレータが一瞬だけ出現してきえてしまいます.

外部Jarの追加はプロジェクト右クリックの「ビルド・パスの構成」から
外部Jar追加ボタンで参照したのですが.
間違ってたり抜けがありますでしょうか.

どなたかお願いします.

151:デフォルトの名無しさん
07/09/13 10:08:39
答えるわよ―!

152:デフォルトの名無しさん
07/09/13 15:50:53
>>150
DoJaが外部Jarに対応してない気がする


153:デフォルトの名無しさん
07/09/13 15:53:41
ドージョ ドージョ

154:デフォルトの名無しさん
07/09/13 17:43:37
>>149
それは携帯での動作?
エミュだとPCによると思うけど処理速度ムチャクチ遅いときあるわよ
音楽に限らず画像の処理速度も携帯とPCじゃ大違いだわ


155:149
07/09/13 21:08:08
>>154
実機です。エミュだと変なピアノ曲が出るんですよね・・・


156:デフォルトの名無しさん
07/09/14 01:21:15
Eclipse 3.3でも使えてる?

157:デフォルトの名無しさん
07/09/14 17:31:51
>>155
ドコモとしては、効果音はmldを使え、勝手アプリ作者はシラネだろう。

158:155
07/09/14 19:21:57
>>157マジすか・・・
ADPCMだと3gpより容量食うくせに音質死ぬほど悪いんすよね。
Doja5携帯ってADPCM何Hzまで使えるんですか?

159:デフォルトの名無しさん
07/09/14 22:06:10
あくまで携帯なんだから低機能を生かしたアプリ作らんと


160:デフォルトの名無しさん
07/09/15 03:24:00
>>158
ADPCMはたしか音源チップに依存していて、DoJa5.0でここまでという決まりはないはず。
でも勝手アプリなら、wav2mldやYamahaのツールの制限を考えて、モノラル、16bit、16kHzくらいじゃね。

161:155
07/09/15 13:30:59
>>159
とあるスーファミソフトを移植中でして・・・忠実に再現したいんですよ・・・。

>>160
回答ありがとうございます。
そうですか・・・いっそwav2mldを自前で とも思ったんですが、ツールでやってみます。
お世話になりましたm(_ _)m

162:デフォルトの名無しさん
07/09/15 19:13:50
忠実に移植して著作権侵害にならないんですか?


163:デフォルトの名無しさん
07/09/15 20:18:54
AFO?

164:デフォルトの名無しさん
07/09/15 22:22:00
坂田師匠のことかー!

165:その1
07/09/18 12:11:17
エミュ上でOpenGL ESを試しているんですが、なにやってもプリミティブが描画されません。
かといってエラーが出たりはしていません。クリアは指定された色でクリアするんですが。
なんかやんなきゃいけないことあります? 

初期化メソッド内
float[] meshArray = new float[ 5*3 ];
meshArray[0*3+0] = 0; meshArray[0*3+1] = 40.0f; meshArray[0*3+2] = 0;
meshArray[1*3+0] = -40.0f; meshArray[1*3+1] = -40.0f; meshArray[1*3+2] = 0;
meshArray[2*3+0] = 40.0f; meshArray[2*3+1] = -40.0f; meshArray[2*3+2] = 0;
.. VertexBuffer = DirectBufferFactory.getFactory().allocateFloatBuffer( 5*3 );
VertexBuffer.put( 0, meshArray, 0, 5*3 );
...


166:その2
07/09/18 12:12:02
public void paint( Graphics g ) {
GraphicsOGL gl = (GraphicsOGL)g;
gl.beginDrawing();
gl.glViewport( 0, 0, 240, 240 );
gl.glDisable( GraphicsOGL.GL_CULL_FACE );
gl.glDisable( GraphicsOGL.GL_DEPTH_TEST );
gl.glDisable( GraphicsOGL.GL_LIGHTING );
... gl.glClearColor( 0.0f, 0.0f, 0.0f, 0.0f );
gl.glClear( GraphicsOGL.GL_COLOR_BUFFER_BIT );
gl.glEnableClientState( GraphicsOGL.GL_VERTEX_ARRAY );
gl.glDisableClientState( GraphicsOGL.GL_NORMAL_ARRAY );
gl.glEnableClientState( GraphicsOGL.GL_COLOR_ARRAY );
gl.glDisableClientState( GraphicsOGL.GL_TEXTURE_COORD_ARRAY );
gl.glVertexPointer( 3, GraphicsOGL.GL_FLOAT, 3*4, VertexBuffer );
gl.glColorPointer( 4, GraphicsOGL.GL_FLOAT, 0, ColorBuffer );
gl.glMatrixMode( GraphicsOGL.GL_PROJECTION );
gl.glLoadIdentity();
gl.glMatrixMode( GraphicsOGL.GL_MODELVIEW );
gl.glLoadIdentity();
gl.glTranslatef( 100, 100, 10 );
gl.glDrawArrays( GraphicsOGL.GL_TRIANGLES, 0, 1 );
gl.glDrawElements( GraphicsOGL.GL_LINES, 2, GraphicsOGL.GL_UNSIGNED_SHORT, IndexBuffer );
gl.endDrawing();

}


167:165
07/09/18 20:12:44
自己解決しました。


168:デフォルトの名無しさん
07/09/18 20:36:40
プリミティブってなんですかぁ?


169:デフォルトの名無しさん
07/09/18 20:39:08
点と線とポリゴンのことです

170:デフォルトの名無しさん
07/09/19 01:28:28
>>167
よく読んでないけど何がどう解決したのか知りたい。

171:デフォルトの名無しさん
07/09/19 01:44:56
どう考えてもこれだろw
>gl.glMatrixMode( GraphicsOGL.GL_PROJECTION );
>gl.glLoadIdentity();


172:165
07/09/19 12:37:32
正解:
・指摘されている通り、射影変換マトリクスが単位行列なら、Viewport変換のためにメッシュデータは[-1,...,1]に正規化されてなければなりません。
・DrawArray() と、DrawElements() の int count パラメータが、プリミティブ数でなく頂点数でした。
ついでにもう一つハマッタのが、glBindTexture, glTexImage2D やっただけではテクスチャーが貼られず、glTexEnvfやTexParameterfでテクスチャーステートを設定しないとだめ。


173:デフォルトの名無しさん
07/09/22 16:53:30
Graphics2 に対応している機種って、もしかして相当少ないんでしょうか。
機種依存ないつもりが、結構起動できない機種があるようなんです。
誰かご存じないですか。

ちなみにこんなアプリです。 URLリンク(wave.no-blog.jp)

174:デフォルトの名無しさん
07/09/22 18:06:06
機種依存のAPIの情報は、公式サイトにあります

175:デフォルトの名無しさん
07/09/22 18:49:49
ありがとうございます。
灯台もと暗しですね。問題はGraphics2ではないみたいですね。
しかし、他に機種依存な部分は見あたらないんですが・・・。
もう少しソースを見直してみます。

176:デフォルトの名無しさん
07/09/22 19:20:08
内容からいっていろいろ計算使ってそうだけど、CLDC1.1の機能使っていながら
1.0機種を対象OKにしてるとかそんなことないの?
つまりfloatとかdoubleとかMath使ってないか、ということだけど

177:デフォルトの名無しさん
07/09/22 20:33:57
いえ、floatもdoubleもMathも使わず、intとlongと自前関数のみで作ってます。

178:デフォルトの名無しさん
07/09/22 20:37:36
なぜだか、P903iはOKで、SO903iやF904iなどでエラーが出るようなんです。

179:デフォルトの名無しさん
07/09/22 21:46:35
東大元暮し

180:デフォルトの名無しさん
07/09/22 21:54:00
// エラー デバッグ ブラウザ ツール
// URLリンク(www.mozilla-japan.org)
// シンプル プログミング ツール
// URLリンク(proforceone.web.fc2.com)
// 素因数分解サンプルプログラム
// Calculation processing にコピーして[RUN]

MAX=1000;br();
for(x=2;MAX>=x;x++){write(" "+x+" ⇒");
 for(i=2;x>=i;i++){if(0==x%i){k=0;
  for(j=2;(i>=j)&&(1>=k);j++){
   if(0==i%j){k++;}
  } if(1==k){write(" "+i);}
 }} br(); 
} br();


181:デフォルトの名無しさん
07/09/22 23:00:35
URLリンク(anti.bne.jp)

182:デフォルトの名無しさん
07/09/23 02:31:41
>>178
勘なんだけど、Javaヒープとネイティブデータヒープにメモリーが分かれてる機種って
リソース不足になりやすくてエラーが出るんじゃないかな?
なぜメモリーに余裕があるはずなのにメモリー不足になるのかは意味不明

考えられる対策は a[50000] まで使う配列なら余裕もって int a[]=new int[60000] と宣言してみるとか
ガーベッジコレクションを使う手とかあるけどこちらは重くなるから実用的じゃない
でもこれらで解決するかは不明

そもそも端末の仕様のバグなのにいつまでも修正しないメーカーが悪い



183:デフォルトの名無しさん
07/09/23 10:19:09
>>174
公式には900の一部の機種までしか情報が開示されてないんだよね


184:デフォルトの名無しさん
07/09/23 11:12:38
>>178
起動エラーとアプリ(aマーク)エラーは別なんじゃない?
プロファイル定義ミスで、ダウンロード対象から外れて怒られるとか
そういう類のエラーを想像してた

まあ173はもうちょっと自分で具体的に何のエラーかぐらいは突き止めんと無理だわな

185:デフォルトの名無しさん
07/09/23 11:13:57
すまん
× >>178
>>182

186:デフォルトの名無しさん
07/09/23 13:06:15
そっか
起動できないってあるからな
だとするとスクラッチパッドにlengthつけてないとかか?
いずれにしてもヒープフラグメントとかいうメモリの問題だけど

187:デフォルトの名無しさん
07/09/23 14:22:35
起動直後に「エラーが発生しました」と表示されるらしいのですが、
この場合、①対応していない命令が含まれていた。
もしくは②ヒープメモリ関係。
が原因と言っていいんでしょうか。

188:デフォルトの名無しさん
07/09/23 14:37:49
っ 例外をcatchして表示させてみる

189:デフォルトの名無しさん
07/09/23 15:18:39
catch出来ない部分で落ちてる予感

190:デフォルトの名無しさん
07/09/23 15:33:19
当方の機種(P903i)ではエラーが出ないので、
catchもできないんです。

191:デフォルトの名無しさん
07/09/23 15:40:03
起動できない機種だけでも、もう少し分かるといいのですが・・・。
(SO903i,F904iでは起動時にエラー)
このアプリです。→ URLリンク(wave.no-blog.jp)

192:デフォルトの名無しさん
07/09/23 18:02:21
>>190
そりゃ当然catch入りバージョンをエラーの出る機種で動かさなきゃ意味ないでしょ

193:デフォルトの名無しさん
07/09/23 19:00:34
トレースの結果はどう出てるんだ?
それ次第って気がするが

194:デフォルトの名無しさん
07/09/23 20:44:09
俺の勘がソースを良く読んだら解決しちゃう系
なんじゃねーかと告げてるw

195:デフォルトの名無しさん
07/09/23 20:51:41
コンストラクタかstart()の中で無茶なことしてんじゃねーかなに1票

196:デフォルトの名無しさん
07/09/23 23:00:29
ソースの読みがまだ足らないようです。(反省)
ソースの最初の部分はこんな作りですが、
どこか まずい所があるのでしょうか。
import com.nttdocomo.ui.*;
import com.nttdocomo.io.*;
import java.util.Random;
import javax.microedition.io.*;
import java.io.*;

public final class FallS extends MApplication{
public void start(){
Can ca=new Can();
ca.setSoftLabel(ca.SOFT_KEY_2,"help");
Display.setCurrent(ca);
Thread thread=new Thread(ca);
thread.start();
}
final class Can extends Canvas implements Runnable{
private int ~;
private int[]x=new int[20];
~//同様な配列宣言
private Random rnd;

public Can(){
rnd=new Random();
~//変数初期値代入
load();
if(mem!=1){mem=1;psave=1;bg=1;balln=10;zn=0;}
}
~~~
}}

197:デフォルトの名無しさん
07/09/24 02:17:01
>~//同様な配列宣言

ここで大きい配列用意してるとか
トータルで大きい容量になっちゃってるとか

198:デフォルトの名無しさん
07/09/24 03:00:45
エラー状況をもっと詳しく調べるんだ!
「起動時にエラー」じゃ曖昧すぎる。
D902iだとFallSは普通に動くが、WaterPが「毎回、起動して5秒後」に落ちる。


199:デフォルトの名無しさん
07/09/24 18:32:51
質問
環境Eclipse3.2.0,Doja5.0
Inputは通常通りに開けるけれども,
try {
  OutputStream out = Connector.openOutputStream("scratchpad:///0");
  DataOutputStream dos = new DataOutputStream(out);
  out.close();
}catch (IOException e) {
}
この処理で
java.lang.NullPointerException
  at ClassName.closeIApplication(+6)
ClassName
ってなるんだが・・
SPsizeの設定とSPファイルの書き込みも許可墨

200:デフォルトの名無しさん
07/09/24 18:54:32
>>199
196もだけど、ちゃんと原因の切り分けをしないとだめ。
ClassName.closeIApplicationのメソッドの中身を確認する。

あと、例のソースでは、outはcloseされるけど、dosがcloseされていないから、リークするかもしれない。

201:デフォルトの名無しさん
07/09/24 19:13:24
アドバイス㌧,これからはdos閉じてからout閉じるようにします

自分なりに切り分けたつもりで検証した結果
OutputStream out = Connector.openOutputStream("scratchpad:///0");
の時点でぬるぽらしく,そのままcatchされている模様

ClassName.closeIApplicationの中身はすっからかんで
public void closeIApplication(){
  saveIApplicationData();
  IApplication.terminate();
}
という具合です

202:199,201
07/09/24 19:16:05
あ,saveIApplicationDataというのが199で書いたソースのあるメソッドです

203:デフォルトの名無しさん
07/09/24 20:03:26
posやlengthを指定してみるとか。
スクラッチパッドのcloseし忘れがないか確認するとか。

204:デフォルトの名無しさん
07/09/24 20:56:44
closesし忘れてもビルド時にエラー出ないんですか?


205:デフォルトの名無しさん
07/09/24 22:09:52
ロジックの追跡と妥当性を検証してくれるビルドツールか
プログラマは種まいて見てるだけー

206:デフォルトの名無しさん
07/09/24 22:49:18
>>198 「毎回、起動して5秒後」に落ちる。
メモリ周りしかないですかね。
自機でエラーが再現できない以上、とりあえず
白ロム買ってみようかと思います。

207:ラ㍑たくまチャン
07/09/24 23:01:07
簡単簡単

208:デフォルトの名無しさん
07/09/24 23:47:03
つーかそこまでする必要あるか?商売でやってるわけじゃなし
はっきりいって規格を統一しないメーカーが悪いんだし
売り上げに響くからか ろくに機種依存情報も出さないし(901以降は全然出してない)
ハードに問題あるならどうしようもないよ





209:198
07/09/25 03:01:59
>>206
900シリーズとかならともかく、最近の機種でメモリ不足って考えにくくないかな。
例外をcatchするバージョンを実機で試すくらいは手伝うよ。
そもそもD902iでWaterPが落ちるのと、FallSの問題は無関係かもしれないが。

210:デフォルトの名無しさん
07/09/25 04:55:05
>196
Canのコンストラクタにあるload()って何やってるの?
このタイミングでスクラッチパッドにアクセスしちゃダメだよ。
コンストラクタでは通信やリソースへのアクセスとかの複雑な処理をしちゃダメ。
機種依存で上手くいくこともあるけど基本的にはやらない。

コンストラクタはエラー返さないし例外が発生してもcatchしようがないから
これが原因ならシステム側でエラー処理されるよ。

211:デフォルトの名無しさん
07/09/25 10:47:51
>>210
いやコンストラクタの中でだってcatchは出来るだろ
まぁ処理にしくじったら即terminate()呼ぶなり変数で場合わけして内部を状況表示に切り替えるなり色々やりようはある

俺としてはスレッド使ってるからちゃんとsynchronizedするのを忘れてて各種変数が壊れてるってのを予測してるけど
特に特定の割合や特定個所で出るけど例外補足に失敗するってパターンはそれが多いよ
自分ではスレッドを使って無くてもCanvas.processEvent()とかをsynchronizedで括り忘れると
実機ではもうどんなバグが出てもおかしくないし
まぁprocessEvent()系を全く使ってなかったら判らんけど

212:199
07/09/25 15:00:16
>>203
㌧クス!
read側で201同様DataInputStreamをcloseしてなかったのが原因でした

言い訳するとDoja3.xの頃に作った頃はこれで動いてたんです・・

213:デフォルトの名無しさん
07/09/25 23:32:00
>>209
ありがとうございます。デバッグver.はほんの少し時間を取れたら作ります。
ところで、落ちたのは何か表示がされた後なのでしょうか?

>>210
load()はsaveした変数値を読み込んでいるだけです。(それほどボリュームはないかと。)

>>211
うむむ、key処理でprocessEvent()は使ってますが、synchronizedは全く使ってないですね。

214:デフォルトの名無しさん
07/09/26 00:40:39
>213 load()について。
>saveした変数値を読み込んでいるだけです。

てことはスクラッチパッドにアクセスしてるんだよね?
>210はそれだとダメじゃないかと指摘している。
処理のステップ数や読み込む量は関係ない。

今回の問題の原因ではないかもしれないが、いかなるコンストラクタでも
デバイス機能の操作(スクラッチパッド、通信、音声、カメラ、描画更新など)は
しないのが常識だと自分では思ってたんだけど…どうなのかな。

215:デフォルトの名無しさん
07/09/26 02:22:42
>>213
processEvent()をsynchronizedで括っておくのは基本
processEvent()がイベントごとに別個のスレッドで呼ばれるか同一のスレッドでキュー処理して呼ばれるかは実は機種依存
jguidefordoja5_x_070423.pdfの86ページ
イベントごとに別個のスレッドで呼ばれる機種の場合processEvent()処理中に再突入されることを考慮に入れなければならないし
またCanvasをThreadで処理してる場合processEvent()のスレッドと並走することになるのでprocessEvent()から呼んでるメンバは全て
synchronizedである必要がある(まぁこちらは当然処理してるとは思うが)

>>214
コンストラクタでやるのが悪いんじゃなく初期起動メソッド(start()やstartApp())の記憶違いじゃね?
コンストラクタそのものは何をやろうと関係ないよ
それも短くしなきゃいけないって決まってるのはMIDPの仕様(ディスパッチャ停止を避けるため)だったと思った
DoJaには関係なかったはず

216:デフォルトの名無しさん
07/09/26 04:28:56
> processEvent()をsynchronizedで括っておくのは基本
Javaの基本って事?それとも携帯アプリでの基本って事?

217:デフォルトの名無しさん
07/09/26 10:21:20
>processEvent()から呼んでるメンバは全てsynchronizedである必要がある(まぁこちらは当然処理してるとは思うが)
ちょっと気になったんだけど、processEventがsynchronizedになっている場合
processEventから呼んでいるメンバは自動的にsynchronizedがかかっているのと
同じ挙動にならないの?

218:デフォルトの名無しさん
07/09/26 15:44:51
>>217
ならない。
なぜなら、synchronized修飾子でロックされるのは指定したオブジェクト
(指定しない場合はthis)であって、メソッド本体ではないから

219:デフォルトの名無しさん
07/09/26 16:27:13
iαppli Development Kit for DoJa-5.0(FOMA)をインストールしたのですが、
いざ起動しようとすると、何も反応がありません。
エラーが出るわけでもなく、一瞬砂時計が出て、それっきりです。
誰か解決法のわかる方はいますか?
ちなみに、Doja3.5、Doja4.0は起動します。

java -version
java version "1.4.2"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.2-b28)
Java HotSpot(TM) Client VM (build 1.4.2-b28, mixed mode)

WinXP HomeEdition



220:デフォルトの名無しさん
07/09/26 17:06:03
公式エミュレータ(Doja5.0)でストレージデバイスにデータを保存するアプリをエミュレートした場合
ストレージに保存したデータがどこに在るか知らない?

>>219
Doja3.5,4.0はアンインストール済み?

221:デフォルトの名無しさん
07/09/26 17:31:47
>>220
アンインストール済みです

222:デフォルトの名無しさん
07/09/26 18:04:39
>>219
一端アンインストールして、別ユーザーでログインしてそっちでインストールしてもだめ?

223:デフォルトの名無しさん
07/09/26 18:07:30
>>220
公式資料によると、C:/iDKDoja5.0/lib/storagedevice/xxx

224:198
07/09/26 18:18:40
>>213
波が動き始めて5秒後にαエラー。
その間、helpの表示、設定の変更や保存は正常に機能してるっぽい。

225:デフォルトの名無しさん
07/09/26 18:58:25
あった!ありがとう>>223

226:デフォルトの名無しさん
07/09/26 18:59:40
>>222
別ユーザでやってみましたが、やはりダメですね。

227:デフォルトの名無しさん
07/09/26 19:09:53
javacのバージョンは?
DoJa5.0のマイナーバージョンは?Eclipseの場合だけど、特定のバージョンだけ起動できなかったことがある。

228:デフォルトの名無しさん
07/09/26 19:16:54
>>227
java -version
java version "1.4.2"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.2-b28)
Java HotSpot(TM) Client VM (build 1.4.2-b28, mixed mode)

これではないのですか?

あとDoJa5.0のマイナーバージョンは3.00です。
Eclipseは使ってません。

229:213
07/09/26 19:23:44
>>198
processEventにsynchronizedを付けて、
トレースモードにしたアプリをアップしました。↓
URLリンク(wave.no-blog.jp)
エラー情報頂けるとありがたいです。
(FallSでエラー出る方もいらっしゃれば・・・)

230:デフォルトの名無しさん
07/09/26 20:59:02
>>229
D902iで、WaterP v4、WaterP2ともにαエラー発生。
ALERT: java.lang.OutOfMemoryError

FallS v1は問題なく動きますな。

231:229
07/09/26 23:31:03
>>230
予想通りのエラーですね。
ということで、対策デバッグ版アップしました。(同ページにて)
・System.gc()を初期化後に実行する:WaterP3
・定期的に実行する:WaterP4

232:デフォルトの名無しさん
07/09/27 01:20:56
processEventにsynchronized付けるとキー入力が遅くなると思うんだが。
processEventにはsynchronizedをつける必要ない設計するのがセオリーなんじゃないの?
と公式アプリつくってる者の意見でした。

233:デフォルトの名無しさん
07/09/27 02:32:44
paintをsynchronizedする人なら見たことあるけど、processEventはないな。

234:デフォルトの名無しさん
07/09/27 03:13:02
>>216-218
何か話が噛み合ってない気が…
以下2メソッドは同意。

public synchronized void processEvent(){
//...
}
public void processEvent() {
synchronized(this) {
//...
}
}

synchronizedを指定したオブジェクトに対して、別スレッドから参照が行われた場合、
synchronized対象のロックが切れるまで、別スレッドは待ち状態になる。

2つのスレッドからprocessEventが呼び出されたとして、
先に呼び出されたほうがthisをロックする。
後から呼ばれたほうはthisのロックが解除されるまで待ち。

thisのロックが解除されるのはsynchronizedスコープの後なので、
その間呼び出されるメソッドもロック中と同等の動作になる。

>processEvent()から呼んでるメンバは全てsynchronizedである必要がある
これはちとオーバーじゃないかね(´・ω・`)


235:デフォルトの名無しさん
07/09/27 18:05:22
ちょっと教えてください
iアプリを作って配付する場合
microSDに入れて配付とかした場合、アプリを起動できないですよね?
ネット上から落としてもらうしかダメなんですかね?

236:デフォルトの名無しさん
07/09/27 18:16:55
うん、そう。

237:デフォルトの名無しさん
07/09/27 18:29:16
なんとかやり方ないのかねえ
まあネット上に置いてあったからってだれかれ構わず見つけて落とされることはないと思うけど
できれば配付した人を特定しておきたいからminiSDなりmicroSDなりで配付したいんだけどなあ

238:デフォルトの名無しさん
07/09/27 18:31:25
DL時に特定できるように会員認証でもつければ良いんでないの?
それくらいのCGIは書けるでしょ

239:デフォルトの名無しさん
07/09/27 19:08:26
>>231
WaterP3は5秒でOutOfMemoryだが、WaterP4は落ちなくなってた。
ただ、2~5秒ほど動いては1秒以上停止(おそらくGC)するので、
アニメーションがウリのアプリとしては致命的だろうな。


240:デフォルトの名無しさん
07/09/27 19:24:33
> それくらいのCGIは書けるでしょ

241:デフォルトの名無しさん
07/09/27 19:50:56
>>219
doja.exeをダブルクリック等で直接起動させたときに動かないのか?
それとも、バッチファイルやコマンドプロンプトから -i や -j などの
オプションをつけて起動したときに動かないのか?

242:デフォルトの名無しさん
07/09/27 20:59:42
>>237
先に配布予定者の端末IDを聞いておいて、それに適合する場合のにDL可能ってどうよ?

243:デフォルトの名無しさん
07/09/27 21:48:11
じゃあ白ロムにアプリを移すのも無理なんですか?


244:デフォルトの名無しさん
07/09/27 22:33:41
配布した人を特定したいのにminiSDで配布出来たら、その時点で意味ないだろ。
やるならシリアルナンバーでも配るしかないな。

245:デフォルトの名無しさん
07/09/27 22:37:13
>>237
SDにキーデータファイルを入れて、
それがなければ初回起動できないようにするとか。

246:デフォルトの名無しさん
07/09/27 23:08:37
>245
何も知らなければ全部コピーすると思わないのかい。


247:デフォルトの名無しさん
07/09/27 23:45:20
>>245
そこまで自由度のあるSDへのアクセスそのものをiアプリからはできないわけだが

まぁ実用的に落とした人を断定しておきたかったら落とす場所を
携帯でアクセスしか出来ないようにした上にBASIC認証にでもして
落とせる人、一人一人にIDとパスを割り振った上でアクセスログを取って
明らかに不特定多数からそのIDとパスが使われてたらそのIDとパスを停止する形にするとかかな

むしろSDに入れて配布なんて方法の方が中身の全ファイルをzipで固めてどこかにアップされれば
完璧アウトな上に流通を止める手段がないよ


248:デフォルトの名無しさん
07/09/27 23:52:10
>>242 に一票

249:デフォルトの名無しさん
07/09/28 00:49:01
質問させてください。

iアプリでソケット通信をする事は可能ですか?
調べていると出来ないように感じたのですが、その場合自前で用意したサーバにアクセスするにはHTTPで接続しにいくしかないですかね?

250:デフォルトの名無しさん
07/09/28 01:06:57
>>219
関係あるかどうか判らないけど。
うちは1.4.2でDoJa入れたら駄目で、
今は1.5.0_12でチャンと動いてる。

251:デフォルトの名無しさん
07/09/28 02:36:14
>>249
はい

252:デフォルトの名無しさん
07/09/28 03:15:00
URLリンク(www.mitsubishielectric.co.jp)
DってJITしてあの速度? 冗談はよしてくれ。

253:デフォルトの名無しさん
07/09/28 03:38:31
>>251
やっぱりそうですか。

ソケットを使って書いていたので、何かいい方法がないか、それともCGIやJSP等の方がいいのか検討してみます。
ソケット通信でも自分でHTTPヘッダを処理してやれば大丈夫なのかなぁ・・・。
色々調べてみます、ありがとうございました。

254:デフォルトの名無しさん
07/09/28 04:12:32
>>252
これは嘘じゃね?

255:デフォルトの名無しさん
07/09/28 07:52:02
>>249
iモードはソケット通信できないよ

HTTP通信はOK
HttpConnectorとか読んでみ

256:デフォルトの名無しさん
07/09/28 11:51:23
>>252
ほかの機種もJITなんじゃね?

257:デフォルトの名無しさん
07/09/28 13:51:48
まさか

258:デフォルトの名無しさん
07/09/28 14:06:27
>>252
>D505 i,D505 iS,D506 i,D900 iに実装している。
全部糞端末じゃねぇかw

259:231
07/09/28 20:54:05
>>239
ありがとうございます。
もしかすると、メモリ使用量増加の原因が分かったかもしれません。
↓WaterP5で落ちるかどうか試してみてください。
URLリンク(www.i-paradise6.jp)
(サイトがちょっとトラブっているので、別の所にアップしました。)

260:デフォルトの名無しさん
07/09/28 23:00:46
>>259
WaterP5でもOutOfMemoryだった。
計算して線を描くだけならメモリ食わないと思うんだが。。。

261:デフォルトの名無しさん
07/09/28 23:55:16
すみません、Eclipse3.2、または3.3にて、エミュレータが起動した瞬間に落ちてしまうようになりました。
ビルドでエラーは出ず、JARファイルは生成されています。
DoJa5.0ツールで直接ビルド、起動した場合は正常に起動、動作します。j2sdkはは1.42です。
Eclipseを介してビルドした物はDoja5.0ツールから起動しても落ちます。
また少し前まではEclipseでも正常に起動していました。(ただし途中で落ちてました。)

何か設定を弄ってしまったのかもしれませんが、Eclipseに明るくなく、対処方法がわりませぬ。
思い当たる節があれば是非教えてください。

262:デフォルトの名無しさん
07/09/29 00:00:15
Stringの中身を消すとき
str="";とstr=null;
ってどっちの方がメモリ節約できますか?

263:デフォルトの名無しさん
07/09/29 00:58:55
消すという概念自体がjavaに当てはまらない気がするが
ガベコレに拾ってもらう上で""(空文字)オブジェクトが生成されない
str=null;の方が節約って意味では確実なんじゃない?
str="";は結局str=new String("");って事だから古いstrの中身は消えるだろうけど
新しいStringオブジェクトが生まれてるよ

264:259
07/09/29 01:13:49
>>260
そうでしたか。
getImageでImageをpaint内で生成しているのが原因かと思ったのですが・・・。
(描画の重ね合わせに、Graphics2.setRenderMode()と合わせて使用)

色々調べてみたところ、
さらにImageをdisposeしていないのがまずいような気がしたので、
getImage前にdisposeするようにしてみました。(WaterP6)どうでしょう。
あと、このgetImageをスイッチできるようにしました。

265:デフォルトの名無しさん
07/09/29 01:40:57
>>263
文字列リテラルはクラスがロードされたときに生成されて、
str = "";
は str がそれを指すようになるだけ。
そのたびに新しい String オブジェクトが生成されたりはしない。

266:261
07/09/29 02:06:39
すみません、自己解決しました。
デバッグの仕方を勉強して実行したたところ、
ALERT: java/lang/ClassFormatError: Bad version information.
が出てて、JRE1.5でビルドされているのが問題のようでした。コンパイル設定変えたら動きました。
1.4のbinフォルダにパス通したのはエミュレータ動作用だったのかな。
スレ汚しすまそ

267:デフォルトの名無しさん
07/09/29 02:07:10
>>261
3、4回、マイナーバージョンの違うDoJaを交互にインストール・アンインストールして直ったことがある
Eclipse 3.2.0 + Windows Vista + JDK 1.6

268:デフォルトの名無しさん
07/09/29 02:46:53
>>264
D902iでWaterP6テスト。
blurをonにした瞬間、NullPointerExceptionで落ちることがあるのはご愛嬌として、
OutOfMemoryは起きなくなったみたい。
たしかに毎フレームGraphics2#getImage()はメモリ食いそうだなぁ。




269:デフォルトの名無しさん
07/09/29 03:46:10
>さらにImageをdisposeしていないのがまずいような気がしたので、

脱力系のオチかよ

270:264
07/09/29 09:01:18
>>268
よかった。
getImageで上書きされるものと考えていたのが問題でした。
普通の使い方ならば、ガーベージ自動処理のタイミング的に大丈夫なのでしょうね。

他のアプリにも同様の処理をしているものがあるので、
アプリの機種違いによるエラーは、これで解決しそうです。
(アプリ_FallSのエラーは、現行ver.では起きないようなのでOKです。)

お手伝いいただき、ありがとうございました。

271:デフォルトの名無しさん
07/09/29 13:53:15
毎回getImageするより、オフスクリーンバッファを2枚用意したほうがいいんじゃないか?
Imageの描画コンテキストはGraphics2にキャストできないんだっけ?

272:デフォルトの名無しさん
07/09/29 14:42:06
Imageに対して直接Graphics2の描画(加算レンダリング)をするって事ですよね?
確かにその方法は良いと思います。
できるのであれば、どなたか教えてください。

273:デフォルトの名無しさん
07/09/29 15:29:39
>>272
確かにその方法は良いと思ったんなら、まず自分でやってみろよ。
良いと思うほどなんだから実現の可能性があることは自分でも分かってるんだろ?
教えてくださいじゃなくて、コード書くのが面倒なのでかわりに書いてくださいじゃないのか?

274:デフォルトの名無しさん
07/09/29 18:36:19
ってか、いきなりレベル低くなったな

275:272
07/09/29 19:26:02
>>273
こうすれば良いのですね。
Graphics gi=image.getGraphics();
Graphics2 g2=(Graphics2)gi;//簡単な事なのに、これを思い付けませんでした。

で、この方法で組み直したところ、1つ問題が出てきました。
drawLine((i+1)*d,y[i+1],i*d,y[i]);//(d:1ラインの横方向の大きさ)
曲線を連続したラインで表現するため、↑のようにしていたのですが、
これだと、隣のラインと1ドット重なってしまい、
当然、加算していくとそこだけ色が変わって
・・・
1ドットずれた位置の変位yを計算する方法↓で自己解決しました。
drawLine((i+1)*d,y[i+1]+(y[i+1]-y[i])/d,i*d,y[i]);
(厳密には変位が大きくなるとラインが途切れることになりますが)
これでgetImage()よりは軽くなったはず。(多謝)

276:デフォルトの名無しさん
07/09/30 02:24:48
他人のアプリのそんな細かい部分を語られても
さっぱり分からないが、動いたのならおめでとう。
それにしてもモーションブラーが実装できる時代になったんだなぁ。

277:デフォルトの名無しさん
07/10/01 16:08:11
最近JAVAプログラムを始めた初心者です。
リアルタイムなゲームを作ってみようと思って色んなサイトを参考にしながら作ろうとしています。
で、現在はスレッドを一つ作ってその中で無限ループさせているのですが、一つ疑問が浮かびました。
スレッドの入り口(無限ループの外)にSystem.out.println("スレッド実行");と書いた場合、ひたすら"スレッド実行"
という文字が出力されていました。これはスレッド自体が無限ループのように呼び出されている、という事
なのでしょうか?
ソースの例は以下のような感じです…。
public class applitest extends IApplication{
public static testCanvas a_test;
public void start(){
a_test = new testCanvas();
Display.setCurrent(a_test);
a_test.start();
}
class testCanvas extends Canvas{
public void start() {
System.out.println("スレッド実行中");
while(true){
//メインループ
try{
Thread.sleep(30);
} catch(Exception e){
}
repaint();
}
}
}
}


278:デフォルトの名無しさん
07/10/01 16:10:25
うん?どこでスレッドを作ってるんだ?スレッドを作ってるようには見えないが・・・

279:デフォルトの名無しさん
07/10/01 16:31:08
>>277
スレッドが作れて無いようだが?
基本的にThreadクラスから継承するんじゃないならRunnableインタフェースを実装しなきゃだし
スレッド実行開始はThreadクラスのstart()だがスレッドの実体はどっち方法で実装してもrun()だぞ?
後Canvasのpaint()はabstractだから省略できんだろ、例として書くならそこも簡単でイイから書きなさい

一応IApplicationのstart()とCanvasのイベントメソッドが別スレッドになるかも?というのを使って
IApplicationのstart()でCanvas内の無限ループメソッドを使ったメインループ作成方法はあるけど
これはスレッドを自分で作ってるとは言わないし機種に依存するはず(動く場合が多いけど)

280:277
07/10/01 17:35:39
あれっ、本当だ…。Runnableが実装されてませんね…。
よく考えたらスレッドを作成して動かしてるのはVアプリ用の方でした。
こちらの方法はスレッドじゃないですね…失礼しました。
しかも279さんの仰る通り簡略化しすぎてました…。

とは言えせっかくなので教えて頂ければ幸いなのですが
(改行エラーが出たのでソースは次に書きます)
→ソース
という感じで作っています。この場合、自分は a_test.start(); によってtestCanvas内のstart()メソッド
が一回だけ実行され、その中の無限ループでグルグル処理をするっていうイメージで作ったんです。
しかし実際にはtestCanvas内のstart()メソッドが何度も実行されているようなのです。
物凄い勢いで”実行中”というトレースを吐き出します…。
質問自体分かりづらくて申し訳ないのですが、なぜtestCanvas内のstart()メソッドが何度も呼び出される
のか、ご教授願えれば幸いです。

281:277
07/10/01 17:36:30
public class applitest extends IApplication{
 public static testCanvas a_test;
 public void start(){
  a_test = new testCanvas();
  Display.setCurrent(a_test);
  a_test.start();
 }
 class testCanvas extends Canvas{
  public void start() {
   System.out.println("実行中");
   while(true){
    //メインループ
    repaint();
    try{
     Thread.sleep(30);
    } catch(Exception e){
    }
   }
  }
  testCanvas(){
   //色々処理
  }
  public void paint(Graphics g){
   //描画
  }
 }
}

282:デフォルトの名無しさん
07/10/01 17:38:37
>IApplicationのstart()でCanvas内の無限ループメソッドを使ったメインループ作成方法
Fの505,506,900でこれやると、processEventとmediaActionに処理こねぇ(ノд`)

283:デフォルトの名無しさん
07/10/01 17:41:25
Eclipseのデバッグモードで確認すれば一発

284:デフォルトの名無しさん
07/10/01 17:58:10
>>280
これ実機の話か?
取り敢えずDoJa5.0のエミュ上だと"実行中"は1度出力されるだけだ
a_test = new testCanvas();
の前に
System.out.println("起動");
a_test = new testCanvas();
ってやるとどうなる?
IApplicationのstart()がループしてるのか、Canvasのstart()がループさせられてるのか切り分けてみ

285:デフォルトの名無しさん
07/10/01 18:02:28
あ、後当然ながらstart()とprocessEvent()の両方からアクセスしてるメンバは全部synchronizedになってるよな?


286:デフォルトの名無しさん
07/10/01 23:20:27
>>282
マジ?
ずばりこのやり方で作りまくりなんだけど、、
Fの901以上とか700は大丈夫なの?

287:デフォルトの名無しさん
07/10/02 00:09:24
>>286
この手法って機種依存じゃないの?
IApplication.start()がCanvas.processEvent()とは必ず別スレッドで呼ばれることが保証されてるってどっかドキュメントに書いてある?


288:282
07/10/02 02:51:23
>>286
実は端末がなくて、そこまで調べていない。
とりあえずデバッグ時に、手元にあった上記の三つは動作しなかったので
直した。その他の端末は、修正後に検証センターで端末チェックしたので
その他のF機についてはわからない。

289:286
07/10/02 06:45:39
>>282
>>287
10K制限の時から気にせずやってたけど、
今は容量制限もゆるいし普通のやり方が一番安全ですね。

290:デフォルトの名無しさん
07/10/02 11:26:51
俺もstart()で無限ループやりまくってるw

リリース前にゃ全端末チェックして貰った事もあるけど
問題なかったなぁ。ユーザからクレームも上がってない。

んまぁ音鳴らすアプリが殆どない上processEvent使ってないし
気づかなかっただけかもだけど。


291:デフォルトの名無しさん
07/10/09 11:45:28
過疎ってる(゜Д゜)


292:デフォルトの名無しさん
07/10/09 14:12:31
おうよ

293:デフォルトの名無しさん
07/10/09 20:59:45
ネット上のAPIリファレンスの見方を教えて下さい
全然分かりません

294:デフォルトの名無しさん
07/10/10 10:43:16
ネット上にDojaのAPIリファレンスなんてあったっけ?
ここからダウンロードして使ってえば。
URLリンク(www.nttdocomo.co.jp)


295:デフォルトの名無しさん
07/10/11 01:17:55
このHPなんだけど(Doja5.0)
URLリンク(www.rcdtokyo.com)

例文が全然ないから書式が全然分かりません
できるだけ詳しく教えてください

296:デフォルトの名無しさん
07/10/11 01:20:24
それはまず Java の勉強をするべきでは?

297:デフォルトの名無しさん
07/10/11 03:16:15
>>295
まず初心者用のjavaの勉強から始めるべきだし
もしjavaの勉強のためにDoJaを使おうとしてるなら奨めはしないが
どうしてもというならiアプリ開発解説系サイトの初心者講座を見てhello worldからはじめるべきかな
その上でまずDevGuide.pdfとjguidefordoja5_x_070423.pdfを内容覚えるぐらいに読んでおく
APIリファレンスはリファレンス(参考書)であって入門書ではないからリファレンスだけを見ても
iアプリは作れるようにはならないよ?

もちろんjavaの事を既によく知っていてSwingとは言わんからAWTでいいから使ったことがあるとかなら
DevGuide.pdfとjguidefordoja5_x_070423.pdfを適当に流し読みした後にAPIリファレンスだけあれば
iアプリは作れるだろうけどね

298:デフォルトの名無しさん
07/10/11 22:08:04
初心者用のjavaの勉強は5年もしました
しかしDojaのAPIリファレンスは難解すぎて理解できません
もうやめます

299:デフォルトの名無しさん
07/10/11 22:59:52
Java で5年間何をやってたのか気になるところだな。


300:デフォルトの名無しさん
07/10/12 00:44:16
5年間ずっとjava初心者用HPのサンプルコードのコピペを続けてたのだろうか?
それはそれで根気があるが……

301:デフォルトの名無しさん
07/10/12 00:45:41
ネタだろ。
数年前に一週間程度java勉強しただけの俺でも何とか分かる。

302:デフォルトの名無しさん
07/10/12 21:54:18
しかしそれは本来のJavaでなく携帯向けJavaだったのだ

303:デフォルトの名無しさん
07/10/13 02:10:42
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄」
―――――――‐┬┘
                        |
       ____.____    |
     |        |        |   |
     |        | ∧_∧ |   |
     |        |( ´∀`)つ ミ |
     |        |/ ⊃  ノ |   |
        ̄ ̄ ̄ ̄' ̄ ̄ ̄ ̄    |    ミ [本来の Java]



304:デフォルトの名無しさん
07/10/13 03:35:34
>302
携帯向けのJavaが偽物みたいにいうな禿

305:デフォルトの名無しさん
07/10/13 03:57:13
携帯向けのJavaなんて存在しないんだけど?w

306:デフォルトの名無しさん
07/10/13 05:14:54
JavaME

307:デフォルトの名無しさん
07/10/13 07:53:16
CLDCとMIDPの立場って一体……

308:デフォルトの名無しさん
07/10/13 07:53:21
携帯向けのJavaってソースに
#ifdefとか#defineとか入ってる奴?w

309:デフォルトの名無しさん
07/10/13 08:02:59
無知だな

310:デフォルトの名無しさん
07/10/13 08:36:07
>>308
30Kに収めようと思ったり機種依存APIを使うために場合分けが必要な場合(Unable to load class回避)には
必要に応じてプリプロセッサも使うけどな
まぁそれも初心者にはあまり関係ない話だ

311:デフォルトの名無しさん
07/10/13 08:53:40
>>307
世界で使われている

312:デフォルトの名無しさん
07/10/13 12:13:12
プリプロセスできれば、と思うことは何回もあった

313:デフォルトの名無しさん
07/10/13 12:19:52
30KiBの壁にあたったとき、プリプロセッサ使って3KiBくらいちんまく
なったときには、純粋なJavaと決別しようと思ったさ。

314:デフォルトの名無しさん
07/10/13 12:48:26
KIBだんご

315:デフォルトの名無しさん
07/10/14 00:05:44
プリプロセッサってクラスファイルを小さくしてくれるの?
あ、でもなんか単位が違うなぁ

316:デフォルトの名無しさん
07/10/14 01:53:14
Kを1000じゃなくて1024であることを明確に示したいときにはKiって書くのよ。

317:デフォルトの名無しさん
07/10/14 01:59:05
それ何業界で使われてるの? ストレージ関連?
こっちでは単に KB て入ったら 1024 bytes 以外の可能性はないなあ。
M が 1000^2 じゃなく 1024^2 であると示したい場合は MeB?

318:デフォルトの名無しさん
07/10/14 01:59:33
でもあんまり浸透してないよなぁそれ・・・
キビバイトとかメビバイトとか言いにくいからかな

319:デフォルトの名無しさん
07/10/14 02:05:58
>>317
URLリンク(ja.wikipedia.org)

320:デフォルトの名無しさん
07/10/14 02:20:10
KIBだんごが正しくてワロタ

321:デフォルトの名無しさん
07/10/14 03:32:02
純粋なJavaなんてこだわってるのは信者だけ
そろ信者と頭の古いsunのせいでそれはいるだろって機能でさえ
C#がでるまで入れようとしなかったくらいだから迷惑な話だよな

322:デフォルトの名無しさん
07/10/14 03:35:49
いきなりどうした?

323:デフォルトの名無しさん
07/10/14 03:48:33
つまり、プリプロセッサを公式にサポートしろと言いたいのですよw

324:デフォルトの名無しさん
07/10/14 04:01:43
>>315
組み方によるがプリプロセッサに頼った方が小さくなる
例えばstatic finalは#defineに置き換えれば大抵の場合クラスファイルを縮小できる
まぁ色々あるんで一概にどうこうとは言いにくいんだが読みやすさを損なわないレベルで小さくなる場合が多いのは事実だな
ただ初心者にはお奨めはしないけどな
Obfuscatorを2~3個と7Zipも使ってもどうにもならない場合の最後の最後の手段だな

325:デフォルトの名無しさん
07/10/14 04:06:34
>318
言いにくいからというより、単純に通じないからだろうな。
メディアや様々なドキュメント類が一斉に変えない限り普及しないんじゃないだろうか。

現状、ドキュメントなら大抵「1キロバイト=1024バイト」とか注意書きがあるんで混乱しないし、
1キロバイトが1024バイトなのはファイルサイズやメモリ容量、
1000バイト(というか1メガバイト=1*1000*1000バイト)なのはストレージ(大抵HDDを指して)、
としてまず問題なく会話できるし。

326:デフォルトの名無しさん
07/10/14 07:31:01
最近の人は「キロ」と「ケー」の区別をつけないのか

327:デフォルトの名無しさん
07/10/14 07:45:38
HDDさえ1024単位にしてくれりゃ会話でまぎらわしいことは
かなり減ると思うけどな。

328:デフォルトの名無しさん
07/10/14 18:14:45
通信速度が10進数だから,そっちを基本にするしかないだろ

329:デフォルトの名無しさん
07/10/14 19:38:04
10進数で通信速度を測定するのって何の通信?

330:デフォルトの名無しさん
07/10/14 21:29:29
話切って申し訳ないですが、質問させてください。。

904iシリーズで追加されたオプションAPI、
「動作認識」を実装しようとしてるのですが上手くいかず困ってます。。

最初はとりあえず、ケータイの傾き(rolldata)を取得し、
その値を画面に表示させるコードを書こうとしています。

プログラミング初心者のため、かなり汚いコードだとは思いますが、
指摘いただけるとうれしいです。

331:330
07/10/14 21:33:46

public class Gesture1 extends IApplication {

public void start() {
GestureCanvas c = new GestureCanvas();
Display.setCurrent(c);
c.exe();
}


332:330
07/10/14 21:35:22
//続き
class GestureCanvas extends Canvas {

void exe() {
RollReader rollreader = RollReader.getRollReader(0);
Graphics g = getGraphics();
float zahyo[] = new float[2];

while (true) {
//動作認識処理
rollreader.start();
RollData roll = rollreader.getRollData();
zahyo = roll.getAccumulatedMotion();
rollreader.stop();

g.lock();
g.setColor(g.getColorOfName(g.WHITE));
g.fillRect(0, 0, getWidth(), getHeight());
g.setColor(g.getColorOfName(g.BLACK));
g.drawString("x座標 : " + zahyo[0], 5, 20);
g.drawString("y座標 : " + zahyo[1], 5, 40);
g.unlock(true);

333:330
07/10/14 21:36:04
//最後

try {
Thread.sleep(200);
} catch (Exception e) {
}
}
}
public void paint(Graphics g) {
}
}
}

//長々とすみませんでした。。。

334:デフォルトの名無しさん
07/10/14 22:06:48
機種は?
確かDだけ何か違ったとか報告受けた覚えがある。

335:330
07/10/14 22:16:48
SH904iです。。
エミュレータで試験できないので、実機にアプリをDLして実行してみているのですが、エラーの表示と共に強制終了されてしまい原因もわかりません。。。

336:デフォルトの名無しさん
07/10/14 22:28:07
Exceptionでエラー確認してみ

337:330
07/10/14 22:32:37
330です。何度もすみません。
Dだけなにかが違うという件ですが、、
Dには加速度センサが、SHとPにはgesturetek mobileが搭載されているということだと思います。
前者ではその名のとおりセンサを使って、後者ではインカメを用いた画像検知によりケータイの動きを認識します。

ドコモ提供のAPIリファレンス(オプション・拡張編)
URLリンク(www.nttdocomo.co.jp)
では、最後の章に加速度センサの、19章に動作認識(インカメ使用)の説明があります。

私は、shですので、インカメを用いた動作認識を実装したいと考えています。

338:330
07/10/14 22:35:00
>>336
Main :com.nttdocomo.device.gesturereader.GestureException Gesture1
com.nttdocomo.device.gesturereader.GestureException
at com.nttdocomo.device.gesturereader.RollReader.getRollData(+80)
at Gesture1$GestureCanvas.exe(+22)
at Gesture1.start(+17)
com.nttdocomo.device.gesturereader.RollReader

このようなエラーが出ますが、未熟者のため解決できず。。。

339:デフォルトの名無しさん
07/10/14 22:35:14
とりあえず、運良く会社から持ってきてた俺自作のソース見ると

m_RollReader.start();
m_RollReader.recenter();

はwhile() の上に出して1回だけにした方が良さそう
それでもダメなら

m_RollData.getImmediateMotion();

の方のパラメータも変なの来てるか確かめれ。
もちろんExceptionもなw

340:330
07/10/14 22:41:44
>>339
ありがとうございます!
がんばってみます。

341:330
07/10/14 22:48:11
>>339
一つ質問なのですが、
rolldata.start()
をwhile外に出すとすると、
rollreader.stop();
の位置が問題になると思いますが、

一回一回の処理ごとにstopかける必要はないのでしょうか?
というか、もしかしてstop()自体なくても、動作に支障はないのですか?

342:デフォルトの名無しさん
07/10/14 23:32:23
大きい範囲で1回であればいるかもしれんけど、
枚フレームする必要は無いな。

まぁ、経験上カメラとか外部のインターフェース使う奴は
動作が遅いのが普通だから毎フレーム呼び出しは
無理な場合が多い。

343:デフォルトの名無しさん
07/10/15 00:40:55
マナーモードや受話音量の制御ってアプリ側からは出来ないですかね?

344:デフォルトの名無しさん
07/10/15 04:12:01
できちゃったら本末転倒
アプリや本体の挙動を制御するための機能なんだから

345:デフォルトの名無しさん
07/10/15 11:07:19
>>341
JSや加速度センサは、start()時の位置を(0,0(,0))として、
次フレームでゼロ地点からの相対位置を元に何かを求めるモノなので、
基本動きっぱなしを想定してる。
なので止めちゃダメ。

あとDoJa5.0 Ver3.0のiαppliToolで、エミュレーションにも対応してる。
ツール→動作認識データ編集と、ツール→加速度センサデータ編集がそれ。
使い物になるかは少々疑問だけど、とりあえずの動作確認だけならエミュで十分なハズ。
パラメータを設定しなくても、エミュで例外は出ない。
ゼロが帰ってくるだけ。

たしか移動量の定義がShake以外不明だったと思うんで、
実機でやってみないとわからない部分が多いと思うがガンガレ。


346:デフォルトの名無しさん
07/10/15 11:20:19
何か酷いな…

JS→ジェスチャーテックのことで略してJSと何処かに書かれてて
  そう覚えてしまった(´д`) ゴメン。
帰って→返って

ちとマグロでも釣ってくるわ。


347:デフォルトの名無しさん
07/10/15 13:12:40
なあ、ⅰアプリで再生できる動画サイズって500KB以上は無理なんか?

348:デフォルトの名無しさん
07/10/15 13:31:43
確かDojaのバージョン依存とみせかけて機種依存だったと思った。
俺の仕事じゃなかったから適当に聞いてたんでうろ覚えw

349:デフォルトの名無しさん
07/10/15 13:36:29
お、機種依存なのか


350:デフォルトの名無しさん
07/10/15 14:07:36
>>347
URLリンク(www.nttdocomo.co.jp)
「4.4.5 FOMA 携帯電話によるVisualPresenter でのiモーションの再生」
を熟読するんだな

351:デフォルトの名無しさん
07/10/15 14:17:48
機種によっては500kb以上いけるかもしれないが
Doja5.0では500kbまでしかだめだ

って書いてあるようなないような

352:デフォルトの名無しさん
07/10/15 15:11:30
500KBまでは全機種で動くことを保証してそれ以上のサイズを放り込んだ時動くかどうかは機種依存ってことだろ?

353:330
07/10/15 15:42:57
>>345
ありがとうございます。
エミュレータの動作認識設定を行い、何とかエミュ上で立ち上がるまでになりました。
しかし、実機に移すと、エラーが起こり、アプリが立ち上がりません。。。

どうしてでしょうか。。。。。



354:330
07/10/15 15:44:30
ちなみに、教えていただいたとおり、while外にstart()を出してあります。
ソースは以下のとおりです。
(また、長々とすみません・・・)

public class Gesture1 extends IApplication {

public void start() {
GestureCanvas c = new GestureCanvas();
Display.setCurrent(c);
c.exe();
}


355:330
07/10/15 15:45:22
//つづき

class GestureCanvas extends Canvas {

void exe() {

RollReader rollreader = RollReader.getRollReader(0);
Graphics g = getGraphics();
float zahyo[] = new float[2];
rollreader.start();
rollreader.recenter();

while (true) {

RollData roll = rollreader.getRollData();
zahyo = roll.getAccumulatedMotion();

g.lock();
g.setColor(g.getColorOfName(g.WHITE));
g.fillRect(0, 0, getWidth(), getHeight());
g.setColor(g.getColorOfName(g.BLACK));
g.drawString("x座標 : " + zahyo[0], 5, 20);
g.drawString("y座標 : " + zahyo[1], 5, 40);
g.setPixel((int) zahyo[0]/2+120, (int) zahyo[1]/2+120);
g.unlock(true);


356:330
07/10/15 15:45:54
//さいご

try {
Thread.sleep(1000);
} catch (Exception e) {
}
}
}

public void paint(Graphics g) {
}

}

}

357:デフォルトの名無しさん
07/10/15 15:47:41
>330
ソースよりもまずエラーの内容を書かないと始まらない

358:330
07/10/15 16:28:37
>>357
指摘ありがとうございます。
エラーの内容ですが、実機だとただ単に強制終了されてしまうため、
どのようなエラーが発生しているのかもわからない状態なのです。。。
エミュレータではエラーは出ないのですが・・・

何度も質問ばかりで申し訳ありません。

359:デフォルトの名無しさん
07/10/15 16:42:16
AppTrace=on にしてみれば実機でも見れるんじゃね?
それと roll の null チェックはした方がいいな。
機械動かす以上すぐにパラメータが取れるとは思えない。

360:345
07/10/15 21:09:43
マグロ漁行ってる間に職場がアク禁食らってた(=´∇`=)
これだからNTT回線は…

>>330
たぶんRollData#getRollData()をtry~catchで囲んでないからだと思うよ。
パラメータ取得失敗時に、普通に例外吐く仕様だったはずだから。

ぬるぽチェックはzahyoの定義で初期化してるから要らないと思うけど、
例外キャッチした時に前のパラメータが残るのだけ注意。
相対座標として扱うと計算ミスる。案外使ってて違和感感じるから。

で、例外についてはリファレンス読んでくださいな。

361:デフォルトの名無しさん
07/10/16 02:45:25
拡縮/回転ができるスプライトシステムを作ろうと思いポイントスプライトでいろいろ
実験しています。どうも画像が歪むのでテクスチャを格子模様にしてどういうときに
歪むのかチェックしたのですがいま一つ条件がわかりませんでした。uvwhのぞれ
ぞれが2のn乗になっていない時かなとも思いましたが64*64でも1ドットだけずれて
表示されたりしたのでよくわかりません。

WEBでサンプルソースを見つけたのでそちらも試したのですが、一見ちゃんと表示
されているようでも右端と下端のドットが表示されていませんでした。
ポリゴンでフィールドを表示しておいてその上にdrawImageで各種情報を表示する
ような(フィールド側は拡縮可能)構成を考えていたのでちょっと悩んでいます。

なぜ歪むのか原因、もしくはプログラム上/データ上のチェックポイントがわかる方
がいらっしゃいましたらご教示願えないでしょうか。



362:デフォルトの名無しさん
07/10/16 09:58:29
歪むとかいってるのはエミュでの動作の話?
昔同じようなことやったことあるが、マスコットカプセルの
ソフトウェアレンダリング(901時代とか)は、内部で2pxとか4px単位で
処理してるのか画面上とテクスチャの大きさをあわせても
そのままdot by dotのマッピングにはならないと判断した
最近のハードウェアレンダリングする機種では結果違うかもしれんよ

363:361
07/10/16 12:52:53
>>362
情報ありがとうございます。
エミュと実機両方で試しましたが、同じような表示になりました。
矩形の枠の一か所だけ1ドット飛び出したような表示になったりしたのですが、その
飛びだす位置が同じだったので同じアルゴリズムなのかなどとちょっと感心しまし
たが。
書き忘れましたが900i以降対応させるのでDojaのプロファイルは3.5です。
試した実機は対応する機種のミニマムスペックに近いF900iやN901icなどの古めの
ものです。
ポイントスプライトをやめて三角形や矩形のポリゴンにしたらどうかな、などと考えて
ましたがソフトウェアレンダリングによる歪みというか誤差だとするとだめっぽいです
ね。やりたいことの性質上、きっちり1ドット単位で表示できないと困るので面倒だけど
drawImageとdrawScaledImageでやろうかな。D900iを非対応にすればGraphics2で
半透明使えるし、回転はほとんどないからなんとかなるかも。

364:デフォルトの名無しさん
07/10/16 13:07:53
小数使ってる?
0.5を足してから整数化するとか。

365:デフォルトの名無しさん
07/10/16 13:10:36
ピクセル毎に自力処理か。
どっちを回してる?
スプライト側のピクセル毎に回転後座標を求めてキャンバスに打つより、
キャンバス側で「スプライトのどのピクセルが来るか」を基に打つといいよ。

366:デフォルトの名無しさん
07/10/16 13:41:50
drawScaledImageに半透明が適用されるかどうかは
機種依存じゃなかったっけ?

367:361
07/10/16 14:16:27
>>364
小数は使っていません。今のところ拡縮などはしないで等倍のスプライトを表示して
実験しているだけなので。その段階で361のような状態なのでちょっと悩んでいたの
です。
>>365
自力での描画処理は行っていません。もし行うとすればたしかに365さんのおっしゃ
るようにディストネーション側のピクセルからソースの色を引っ張ってこないと拡大
したときに隙間とかができてみられたものじゃなくなりますね。そもそも自前描画で
速度は足りるものでしょうか。以前30Kアプリでプログラムサイズが全く足りなくて、
一部ルーチンをスクリプト化してスクラッチパッドに逃がしたことがあったのですが、
以外と速度は大丈夫でした。しかし描画処理となるとそれとは比較にならないほど
演算量が増えるのでやるとするとまた実験が必要ですね。
>>366
情報ありがとうございます。そうなるとちょっと辛いですね。機種情報調べてみます。


368:デフォルトの名無しさん
07/10/16 23:39:40
マスコットカプセル4にしちゃえよ

369:330
07/10/17 11:54:56
>>359, 360
助言ありがとうございます。。

AppTrace=on にして、RollData#getRollData()をtry~catchで囲み、、、

そして、これが重要な問題だったと思うのですが、
RollReader rollreader = RollReader.getRollReader(0);
のカメラIDを(0)から(1)に変更したら、実機で動きました!

インカメのIDは1なんですね。
皆様色々とアドバイス本当にありがとうございました。
助かりました。

370:デフォルトの名無しさん
07/10/17 12:15:05
カメラIDは機種依存だよ

371:デフォルトの名無しさん
07/10/17 13:15:44
確か1の場合が多かった気はするが、機種依存だな。
ウチはとりあえず数回まわして初期化して取れた奴使うってやってた。

372:デフォルトの名無しさん
07/10/17 18:56:21
Dojaの標準クラスのファイル操作って結構メモリ周りを乱雑に扱ってないか?
使えるメモリ少ないのにメモリ上に全部展開とかって出来ないファイルとかどうすればいいんだかねえ

これ標準クラスのソースなんて公表されてないんだよな?

373:デフォルトの名無しさん
07/10/17 20:56:23
鉄拳ってjavaで作られているんですか?


374:361
07/10/18 03:01:39
>>368
マスコットカプセル4だとDoja4.0からなので今回は使えないです。

あれから機種情報を調べたり実験したりしていました。
まずdrawImageの半透明ですがDoja4.0の機種で使えないものが何機種かあった
のでダメでした。3.5だとD900i以外大丈夫だと思ったのですが、4.0でこんなに非対
応の機種があっては採用できません。ためしに実装したものを手元にあるN901ic
で実行したところやはりダメでした。

ポイントスプライトの実験をやり直していたところどうやら縦横が2のn乗であれば
大丈夫らしいことがわかってきました。以前の64*64で駄目だったのは私の見間
違いだったようです。縦横が2のn乗であれば正方形である必要はなく8*16等でも
いけました。今回の場合、画像素材がすべて一辺8の倍数で描かれていたので
8*8に分割して描画してやれば大丈夫そうです。
その場合、プリミティブ数が増えるのでそっちの方がちょっと心配ですが(240*240
の画面だと全面埋め尽くすと900個のポイントスプライト)半透明で描画する可能性
のある画像はごく一部なのでdrawImageと併用して凌げると思います。

iアプリは2年に一回くらいしか作る機会がなく、作る度に何かしら苦労してます。


375:デフォルトの名無しさん
07/10/18 03:53:10
それが楽しかったりするのさー

376:デフォルトの名無しさん
07/10/18 22:57:50
トライアングル2枚で右下だけuv調整、とかいう話をしてるの?

377:デフォルトの名無しさん
07/10/22 03:37:41
ニューロのジョイスティックモードに対応したいと考えています。
PointingDeviceクラスの説明には

>端末によってサポートされていない場合があります。
>未サポートの場合、メソッドが呼び出された時点で
>UnsupportedOperationException が発生します。

とあるのですが、isAvailable()で使用可否を取得するだけでも発生するのでしょうか?
未対応端末なら通常通り十字キーで使用できるように判定したいのですが・・・

378:デフォルトの名無しさん
07/10/22 10:47:44
>>377
例外出ようが何だろうがキャッチすりゃ良いだけでない?



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