iモード携帯電話用Java(iアプリ) Part15 at TECH
[2ch|▼Menu]
1:デフォルトの名無しさん
07/08/21 15:32:26
NTT DoCoMoのiモード携帯電話用Javaに関する話題を扱うスレッドです。

※DoCoMo以外は下記スレへ。
CLDC+MIDP+携帯電話用Javaスレッド part 7
スレリンク(tech板)

■ iアプリ特有ではなくJava一般に関する質問はこちらへ
【初心者】Java質問・相談スレッド104【大歓迎】
スレリンク(tech板)

■ iモード携帯電話用Java(iアプリ)まとめサイト
URLリンク(ton.my-sv.net)

■関連スレ
【日本携帯】Mascot Capsule/Micro3D【標準】
スレリンク(tech板)


2:デフォルトの名無しさん
07/08/21 15:35:00
過去スレ
Part 1 URLリンク(piza2.2ch.net)
Part 2 URLリンク(pc3.2ch.net)
Part 3 スレリンク(tech板)
Part 4 スレリンク(tech板)
Part 5 スレリンク(tech板)
Part 6 スレリンク(tech板)
Part 7 スレリンク(tech板)
Part 8 スレリンク(tech板)
Part 9 スレリンク(tech板)
Part 10 スレリンク(tech板)
Part 11 スレリンク(tech板)
Part 12 スレリンク(tech板)
Part13 スレリンク(tech板)
Part14 スレリンク(tech板)


3:デフォルトの名無しさん
07/08/21 15:36:47
■ 開発環境

NTT DoCoMo - iアプリコンテンツの作成について
URLリンク(www.nttdocomo.co.jp)
Java[tm] 2 Platform, Standard Edition v 1.4
URLリンク(java.sun.com)
CLDC仕様書 日本語版
URLリンク(java.sun.com)
Eclipse.org
URLリンク(www.eclipse.org)

■ 機種依存情報

ん・ぱか工房(iアプリ機種依存情報)
URLリンク(www.saturn.dti.ne.jp)
NTT DoCoMo - アプリケーション作成上の注意点
URLリンク(www.nttdocomo.co.jp)
Overflow! さかきけいのページ(504iまでの機種依存情報つきAPIリファレンスあり)
URLリンク(godwood.allnet.ne.jp)

■ アプリを省サイズ化するツール(ObfuscatorまたはOptimizer)

Java Blender
URLリンク(homepage.mac.com)
jarg - Java Archive Grinder
URLリンク(jarg.sourceforge.net)


4:デフォルトの名無しさん
07/08/21 15:40:38
■ 主なアプリ配布サイト

ギガアプリ
URLリンク(g-appli.net)
アプリ★ゲット
URLリンク(appget.com)
ゲームチャンネルi
URLリンク(appli.channel.or.jp)

■ 携帯関連ニュース

ITmedia:モバイル
URLリンク(www.itmedia.co.jp)
ケータイ Watch
URLリンク(k-tai.impress.co.jp)
Nekomaru What's New
URLリンク(snget.hp.infoseek.co.jp)

■ 関連板

携帯・PHS
URLリンク(hobby7.2ch.net)

携帯機種
URLリンク(hobby7.2ch.net)

携帯コンテンツ
URLリンク(hobby7.2ch.net)

携帯電話ゲー
URLリンク(hobby7.2ch.net)


5:デフォルトの名無しさん
07/08/21 21:15:31
>1



6:デフォルトの名無しさん
07/08/22 08:51:26
>>1
乙です。

そして新スレ質問第1号。
自分の美声(歌声)を再生するアプリを作ろうと思っています。
歌は演奏付で約1分30秒くらいです。
でも、3gppは904以降しか再生出来ないんですよね?
という事は従来の端末のユーザにも美声を聞いてもらう為には
mp3→mldかな〜?とも思ったんですが、サイズが…。
これは素直に諦めるか904以降のユーザにのみ美声を届ける
しか方法がないという事でしょうか?

7:デフォルトの名無しさん
07/08/22 12:38:46
音声のみの3gp動画として再生すればいい。
ただヒープの空き容量によっては90秒は無理かもしれない。

8:デフォルトの名無しさん
07/08/22 12:50:32
OpenGL ESを使った携帯アプリの開発方法は公開されているのですか?

9:デフォルトの名無しさん
07/08/22 13:53:54
Mail mail;
try{
// こいつがエラー
mail = MailAgent.getLastIncoming();
}catch(SecurityException e){
mail = null;
}catch(IllegalStateException e){
mail = null;
}

こういう処理を記述したんですが,
getLastIncoming()が実行されたときに
SecurityViolation: 6 getLastIncoming 0
というエラーをコンソールに残してシステムがダウンしてしまいます
(DoJa5.0 Eclipse)

どこかの設定ファイルで許可が足りないのだと思いますが,
どのようにすればいいのでしょうか...?

10:デフォルトの名無しさん
07/08/22 14:53:33
メール関連のメソッドはトラステッドじゃないと呼び出せないけど
その辺は大丈夫?

11:9
07/08/22 15:17:51
トラステッドってDXのことですよね...
プログラム組んでると基本的なことほど気付かなくて...

そもそも無理なものに四苦八苦してました...
ありがとうございます.

12:デフォルトの名無しさん
07/08/22 15:28:14
自分はPHPでメールも送れるサーバ用意したお

13:デフォルトの名無しさん
07/08/24 15:44:11
今、外部メディアに画像を保存するiアプリを作っているのだが、案外、読み書きに処理時間がかかるんだよね。

んで、時間がかかるのは仕方ないとして、処理中だという事をユーザに教えてあげたい。
または、進捗状態を表示したいのだが、何か良いアイデアはないものかなぁ。

砂時計もどきとかプログレスバーみたいなのは大変そうだし・・・

14:デフォルトの名無しさん
07/08/24 16:20:23
前スレ乙

15:デフォルトの名無しさん
07/08/24 16:27:33
前レス>>999
DoCoMoのソニー端末以外の端末は、タイマ解像度が10msだから
Thread.sleep(1)ってのはThread.sleep(10)と変わらない。
完全にフレームを固定したいなら、そもそもsleepを入れないほうがいい。
電力消費が激しそうだがな。

16:15
07/08/24 16:30:28
前レス>>993
>実機ではいまいち正確に保ってくれないんだ
たぶん、上で説明したタイマ解像度10msのためだと思われる。

17:デフォルトの名無しさん
07/08/24 16:35:00
俺はsleep入れてるけど結構安定してるよ。
フレーム数をチェックして多かったら少しずつ
sleep時間延ばしてやるとかしてる。

当然毎回sleep時間を大きく変えてると不安定になる。

18:デフォルトの名無しさん
07/08/24 16:39:14
>>15
将来的な事を考えて1を指定しているだけで、
別に10msだろーが20msだろーが問題ないよう書いてあるよ。
滑らかなアニメーションは期待薄かもだけどね。


19:15
07/08/24 16:56:05
>>18
あ、別に>>999を否定するために言ったわけじゃないんだ。
否定するように見えたならあやまるよ。すまんかった。

>>17
sleep入れないって言ったのは、完全にフレームを固定したい場合のみだからね。
10msって0.01秒だから、その範囲で多少誤差が出ても体感として分からないし、sleep入れるのが普通だと思うよ。

ちなみに俺のFPS固定のソースは↓
private long backTime;
private int waitTime = 50;    // 20FPS

public run() {
  backTime = System.currentTimeMillis();
  while (true) {
    // 時間待ち
    {
      Thread.yield();
      long time = waitTime - (System.currentTimeMillis() - backTime);
      if (time > 0) {
        try {
          Thread.sleep(time);
        } catch (InterruptedException e) {
        }
      }
      backTime = System.currentTimeMillis();
    }

    // メインの処理を入れる
  }
}


20:デフォルトの名無しさん
07/08/24 16:59:46
>>15
タイマ解像度1000msの端末が有ったとして、
0.5秒目でsleep(1)したら1.5秒までsleepすると思ってない?


21:15
07/08/24 17:12:04
>タイマ解像度1000msの端末が有ったとして、
>0.5秒目でsleep(1)したら1.5秒までsleepすると思ってない?
やべぇ、ちょっとそう思ってた。


>Thread.sleep(1)ってのはThread.sleep(10)と変わらない。
俺のこの発言間違いだね。無視しちゃってください。

22:デフォルトの名無しさん
07/08/24 17:14:57
>>20>>21
>タイマ解像度1000msの端末が有ったとして、
>0.5秒目でsleep(1)したら1.5秒までsleepすると思ってない?

俺もそう思ってた!
WinAPIのsleepは確かタイマ解像度に依存していたと記憶しているが
Dojaの場合は違うのか

23:デフォルトの名無しさん
07/08/24 17:21:16
ひどい流れだ

24:デフォルトの名無しさん
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();



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

4850日前に更新/253 KB
担当:undef