iモード携帯電話用Java(iアプリ) Part15
1 :
デフォルトの名無しさん :
2007/08/21(火) 15:32:26
>1 乙
>>1 乙です。
そして新スレ質問第1号。
自分の美声(歌声)を再生するアプリを作ろうと思っています。
歌は演奏付で約1分30秒くらいです。
でも、3gppは904以降しか再生出来ないんですよね?
という事は従来の端末のユーザにも美声を聞いてもらう為には
mp3→mldかな〜?とも思ったんですが、サイズが…。
これは素直に諦めるか904以降のユーザにのみ美声を届ける
しか方法がないという事でしょうか?
音声のみの3gp動画として再生すればいい。 ただヒープの空き容量によっては90秒は無理かもしれない。
OpenGL ESを使った携帯アプリの開発方法は公開されているのですか?
Mail mail; try{ // こいつがエラー mail = MailAgent.getLastIncoming(); }catch(SecurityException e){ mail = null; }catch(IllegalStateException e){ mail = null; } こういう処理を記述したんですが, getLastIncoming()が実行されたときに SecurityViolation: 6 getLastIncoming 0 というエラーをコンソールに残してシステムがダウンしてしまいます (DoJa5.0 Eclipse) どこかの設定ファイルで許可が足りないのだと思いますが, どのようにすればいいのでしょうか...?
メール関連のメソッドはトラステッドじゃないと呼び出せないけど その辺は大丈夫?
11 :
9 :2007/08/22(水) 15:17:51
トラステッドってDXのことですよね... プログラム組んでると基本的なことほど気付かなくて... そもそも無理なものに四苦八苦してました... ありがとうございます.
自分はPHPでメールも送れるサーバ用意したお
今、外部メディアに画像を保存するiアプリを作っているのだが、案外、読み書きに処理時間がかかるんだよね。 んで、時間がかかるのは仕方ないとして、処理中だという事をユーザに教えてあげたい。 または、進捗状態を表示したいのだが、何か良いアイデアはないものかなぁ。 砂時計もどきとかプログレスバーみたいなのは大変そうだし・・・
前スレ乙
前レス
>>999 DoCoMoのソニー端末以外の端末は、タイマ解像度が10msだから
Thread.sleep(1)ってのはThread.sleep(10)と変わらない。
完全にフレームを固定したいなら、そもそもsleepを入れないほうがいい。
電力消費が激しそうだがな。
16 :
15 :2007/08/24(金) 16:30:28
前レス
>>993 >実機ではいまいち正確に保ってくれないんだ
たぶん、上で説明したタイマ解像度10msのためだと思われる。
俺はsleep入れてるけど結構安定してるよ。 フレーム数をチェックして多かったら少しずつ sleep時間延ばしてやるとかしてる。 当然毎回sleep時間を大きく変えてると不安定になる。
>>15 将来的な事を考えて1を指定しているだけで、
別に10msだろーが20msだろーが問題ないよう書いてあるよ。
滑らかなアニメーションは期待薄かもだけどね。
19 :
15 :2007/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();
}
// メインの処理を入れる
}
}
>>15 タイマ解像度1000msの端末が有ったとして、
0.5秒目でsleep(1)したら1.5秒までsleepすると思ってない?
21 :
15 :2007/08/24(金) 17:12:04
>タイマ解像度1000msの端末が有ったとして、 >0.5秒目でsleep(1)したら1.5秒までsleepすると思ってない? やべぇ、ちょっとそう思ってた。 >Thread.sleep(1)ってのはThread.sleep(10)と変わらない。 俺のこの発言間違いだね。無視しちゃってください。
>>20 >>21 >タイマ解像度1000msの端末が有ったとして、
>0.5秒目でsleep(1)したら1.5秒までsleepすると思ってない?
俺もそう思ってた!
WinAPIのsleepは確かタイマ解像度に依存していたと記憶しているが
Dojaの場合は違うのか
ひどい流れだ
え、ちょっと意味が解らんのだけど 俺はタイマ解像度1000msだったら、 1000ms以下は入れても無駄というか正確に測れない ってことだと思ってた
ハードが十分に速ければそこまで気にする事じゃないんだろうけどなw
>>24 携帯内で1個だけ動いてる解像度1秒の時計をみんなで見てるなら、
秒が切り替わった直後に1秒スリープすると、
次に変わったって気づけるのは約2秒後って話じゃね?
動けば良いやで作ってるから、間違ってたらゴメンw
結局sleep関数の精度はタイマ解像度には依存せず全端末1msが保障されてるということでいいの?
28 :
15 :2007/08/24(金) 17:33:30
俺もだんだん混乱してきた。
>>20 >タイマ解像度1000msの端末が有ったとして、
>0.5秒目でsleep(1)したら1.5秒までsleepすると思ってない?
この場合は、2.0秒までsleepするであってるよな?
え、全然解らん こういうもんだと理解してたんだけど sleep( 1000 )で呼び出したとする ↓ スリープを開始 ↓ タイマーを見て現在時刻を取得(多分ミリ秒単位) ↓ 以降、一定時間ごとに時刻を取得して比較 現在時刻から1000ミリ秒以上経ってたらスリープ解除 この一定時間がタイマ解像度だと思ってた
それでいいんじゃね?
ということはタイマ解像度が100msの端末の最大FPSは10ということになるんでしょうか
え?なんで?
>>33 おげ、違うのか・・・?
タイマ解像度=100msとして
0ms(開始)
処理(20msかかった)
20ms
sleep(1)←タイマ解像度100msなので(1)でも100msまで進んでしまう
100ms
処理(50msかかった)
150ms
sleep(1)←タイマ解像度100msなので(1)でも200msまで進んでしまう
200ms
結局10FPSにならんの?
35 :
34 :2007/08/24(金) 18:07:35
すまん…sleepの理解は34でいい?として FPSを上げたければsleepいれなきゃいんだよね
あ、なるのかも? もう混乱してワケワカラン
タイマ解像度100msということは、100msに一度タイマ割り込みが
発生するということ。
>>34 の例では、20msのあとでsleep(1)をした場合、sleepが終了
するのは、割り込みのタイミングに対してどの時点で命令を発行
したかに依存するので、待ち時間は1〜100msのいずれか。
ごめん、うまく説明できないな。
>>35 基本的にはそれでOKだと思う。
ただ、液晶画面の応答速度を考えると
sleepを削除しても、1000FPSとかはでないと思わr。
>>34 の例でいうと、開始の時点で携帯のタイマが 0ms にリセットされるわけではないから、
90ms(開始)
処理(20msかかった)
110ms
sleep(1)
200ms
かもしれないし、
40ms(開始)
以下略
処理(20msかかった)
60ms
sleep(1)
100ms
かもしれない。結局10FPSになるのは、まぁたぶんそうかもしれんが、保証はない。
sleep(1) は、最低 1 ミリ秒以上スリープする、というだけで、上限は定められてない。
sleepは落ち着いてきたからいいよな。>34が正解。
で、FPSの話に移るとして、大前提。
・FPS固定する理由が端末毎の処理速度差を吸収する目的であるとする。
とした場合、sleepがあろーとなかーと、他の部分を考慮しないとダメ。
他の部分ってのは、『処理が早すぎた場合』と『処理が遅れた場合』。
>>19 と前スレの
>>993 のFPSクラスの場合、
早すぎた場合に関してはsleepで待っているので問題ない。
問題なのは『処理が遅れた場合』の方で、
メイン処理や描画が 1000/フレーム数ms 以上の場合に遅れを取り戻せない。
レースゲームなんかじゃ致命的で、
遅い端末と早い端末が同時にレーススタートすると、遅い端末が後でゴールする。
>backTime = System.currentTimeMillis();
ここを
backTime += waitTime;
とすれば軽い時にそのうち追いつくけど、追いかけてる最中高速アニメーションw
まだ遅れっぱなしの方がマシってくらい有り得ない。
FPS(あくまで全端末の処理速度)を一定に保つ方法はいくつかあるけど、 ここいくつかのレスを見る限り、 前スレ999のみが早すぎるケースにも、遅すぎるケースにも対応してる。 例え描画が1,2フレーム落ちても、mainLoop関数は秒間平均20フレーム回るので、 pos +=speed; と書いてあっても大丈夫。 ただ、999にも書いてあるけど長時間サスペンドや、 ダイアログでmainLoopを止めると対処がムズイ。 他は遅れっぱなしになるか、以下の制限付ければFPS固定になる。 ・どんなに遅い端末でも、1フレームあたり1000/フレーム数ms 以上の時間が かからないようにする。(最悪、遅い端末にフレームレートをあわせる) ・座標計算をこんな感じで…かなり面倒。 pos += (System.currentTimeMillis()-time) * speed / FLAMERATE; ・遅い端末は忘れる で、話を戻してsleepが有るとか無いとか言ってる人。 タイマ解像度は currentTimeMillis() にも影響するので、実はあまり意味ない。 sleep使わないメリットは、sleepに与えた時間以上に休むのを防ぐことができるくらい。
タイマ解像度ってTimer#getResolution()のことで合ってる? getMinTimeInterval()の話が出ないのも引っかかるんだが、 気にしなくていいのかな。
うん、論外。
iアプリベンチはgetResolution()の値を取ってなかったっけ?
>>44 25msとかで記述するのが面倒だから
1000msなり100msで具体的にどーなるかを議論している訳で、
iアプリベンチの値が実際のタイマ解像度と異なったとして、
上の議論には何の影響も無いでしょ。
どんなタイマ解像度の機種であっても、FPS固定できる事が理想なんだし。
流れ切ってすまん。 マスコットカプセルは右、下、奥が正の値の右手座標系って公式資料に書いてるけどこれって一般的? 俺は右手座標系というと右、上、手前が正だと思ってた。
それは数学
>>45 だからその「実際のタイマ解像度」って何かなと思ったのよ。
System#currentTimeMillis()の戻り値が常に一定間隔であることが
すべての機種で確認されてるの?
Thread#sleep(1)を100回繰り返したらタイマ解像度×100の時間が経過するの?
納得して議論してるなら横槍入れてごめん。
別にいいじゃん、そんなに厳密じゃなくても動くんだし。 と思ってみたが、それを理由にして パチスロアプリの仕事を断ったような覚えがあったw パチスロってボタン押してから何ミリ秒以内に停止しないと いけないとか法律で決まってるんだよね。
そもそもは、前スレ
>>999 で投下されたソースに対して、ウェイト部分に
sleep(1)=タイマ解像度よりも低い値を指定しているのでは正しく動作
しないのでは?という疑問から始まった話。
実際の動作は、タイマ解像度の性能が許す限り最良の待ち時間だけ待って
くれるので
>>999 のソースは少なくとも間違っていないっしょ。
で、途中から可変FPSにして見かけ上の動作速度を同じにするような、一昔前の
リフレッシュレートに関する論争みたいな話がでてきてどんどん脱線している
気がする。タイマの説明については
>>37 の解説がハードウェア的にはあってると
思われ。
> タイマ解像度の性能が許す限り最良の待ち時間だけ待って sleepでしょ?最良ねぇ...
55 :
デフォルトの名無しさん :2007/08/28(火) 10:25:14
iアプリでできるチェスってないかな 月額料金を払わなくていい売り切り、または無料で 将棋と比べるとほとんど見かけない
>>55 コード組む話じゃないのならその質問は板違い。
>>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.とか。
>>57 sleep精度がすごくいいね
>>54 のはsleep1回につき1ms程度のオーバーヘッドがある感じなのかな
だとすればsleepでタイミングを計る場合は
前スレ
>>353 みたいにするのがいいのかもな
sleepも自前waitも使わずタイマーで回してるのは俺だけで良い
やっぱタイマー精度もそうだけど全ての端末での動作を確認したい所だよね。 特にサウンド関連なんかはちゃんと鳴るか自分で確かめたいし…。 俺は知り合いから古い携帯をもらって900シリーズはある程度集めたんだけど 901以降ってなかなかくれる人いないんだよね。。 てか、携帯の白ロム?っていうのかな、中身空のやつって店に売ってる?
63 :
61 :2007/08/29(水) 17:00:50
>>62 サンクス。早速見てみた。
てか、白ロムってこんなに高いの??
てっきりワゴンセールみたいな感じで1000円くらいで売ってるのかと思った…
64 :
62 :2007/08/29(水) 17:10:26
白ロム専用の販売サイトはここ以外にもいくつかあるけど 基本的に値段はあまりかわらない。 アプリ開発する会社とかが普通に購入するから この値段で売っているんだと思うよ。
docomo使ってる友人知人に使わない携帯クレクレしてれば案外集まってこない? NとかPとかNとかPとかn ('Д'#)イラネーヨ
>>65 いらないならくれ!
まあヤフオク利用する手もあるわな。
ヤフオクって取引の半数が詐欺か犯罪かヤフー社員の息が掛かってる怪しい取引じゃん・・・
>>65 最近元カノと出かける用事があって携帯買い換えたらクレって言ったんだけど
「あんたデータ消しても蘇らせそうだから嫌」って言われたw
でも確かにヤフオクは怖いなぁ。。
とりあえず俺が集めたのは…
P900iv N900i D701i
って、3つしかないやんけw
まぁでも、あとSOとSHさえGETすればメーカーごとのwav確認は出来るからよしとしよう。
つーか、秋葉行けば手に入る?1000円くらいで買えるなら上京してでも…
>>47 プログラマの常識的には右、上、手前=OpenGLで一般かもしれんが、
これもOpenGL以外にはそうないし一般的かは疑問。
モデルツールはツールで軸方向はいろいろ違うしさ
2D画面のX軸とY軸に合わせて、あと画面の奥に向かってZ軸を伸ばしてるんだろ。 ぶっちゃけ発想が古いと思うが、MascotCapsuleの出自を考えるとそんなもんじゃね。 俺はOpenGLが公開されるまで3Dゲーム作らんつもりなのでどうでもいい。
71 :
デフォルトの名無しさん :2007/08/30(木) 09:54:18
>>70 なるほど。
すげー納得した。
その発想は出来なかった。
>>67 2chのカキコの半数は嘘と煽りの怪しいサイトでしょw
要は使いよう。
質問させてください。 void send() { clearKeyState(); for (;;) { repaint(); Thread.sleep(50); int key = getKeyState(); if (key == Display.KEY_SOFT2) { drawString("認証中", 50, 110); //通信処理 //通信結果表示 } } } このような処理を作成したのですが、思い通りに動作しない 場合があります。 やりたいこと:通信処理中はずっと画面に"認証中"と表示させたい。 問題点:たまに(2割位の確立で)"認証中"が表示されるも一瞬で消えてしまう。 ・通信処理は実機,エミュレータ共に2秒くらい。 ・"認証中"が一瞬で消えてしまったときでも通信処理自体は正常に動作している。 ・repaint()ではダブルバッファリングを使用。 お分かりの方おりましたら、アドバイスよろしくお願いします。
そもそも、そのコードだとソフト2キーを押してる時だけ認証中って 表示される気がするんだけど
"認証中" って描画するための Graphics はどこから?
>>75 通信処理のところでブロックして、forループ回らずにいるんじゃないの?
どちらにしろ通信結果表示のところも怪しい。中でループしてんのかな。
それとも画面を背景色とかでフラッシュしてない?
通信が思ったより早く終わったとかそんなんじゃないのかね。
一瞬だけ表示されるのが嫌なら、最低何秒は表示させるって処理を
追加してはどうだろう。
78 :
74 :2007/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;
}
申し訳ありませんが、あらためてアドバイスよろしくお願いします。
80 :
74 :2007/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 :2007/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(画面全体); //以降描画処理 } だいぶ長々と書いてしまい申し訳ありませんが、よろしくお願いします。
描いてないから描かれてないんだろ。 以上。
> this.g = g; なんだこれは
ctl()から抜け出せてないんじゃないの?
>>83 それはdrawhaikei()で使うためじゃないかな
引数で渡せばいいと思うけど
とりあえずだいぶ設計に問題があるな
drawhaikeiで使うだけならいいけど、たしか"認証中"を描画するためにコンストラクタで初期化してるとか言ってなかったか
drawBox("認証中", 30, 100, 120, 60);のあと 再描画しないで通信処理開始してるからじゃないの? 2割くらいの確率で描画されることもあるってのは システム側が通信開始までの微妙なタイミングで(repaint要求なしでも)たまたま描画しただけで。 一瞬描画されても消えるってのは paint()が実行されたときdrawhaikei(){}内のg.fillRect(画面全体);のとこで消しちゃってるからだろ。 プログラムの構造が変だよ。 drawBox()はdrawhaikei(){}内から呼び出すようにした方が 描画タイミングに一貫性があっていいと思う。
1.通信前 repaint(); ←ここで通信前の画面が描画される 2.通信中、通信直後 drawString("認証中", 50, 110); ←repaintが呼ばれてないので画面には反映されない。 //通信処理 //通信結果表示 ctl(); ←ここまで、通信前の画面が表示されている。 3.通信完了後 repaint(); ←ここで「認証中」が描画される Thread.sleep(50); ・・・ 4.次のフレーム repaint(); ←「認証中」が消される どの辺がダブルバッファなのかという質問は無し?
もしかして g.lock() → g.unlock(); これだけでダブルバッファリングになることしらない?
g.lock()してるあたりじゃまいか
92 :
74 :2007/08/30(木) 15:04:07
74です。 皆様からのありがたいお言葉ありがとうございます。 というか毎回情報不足&ダラダラと長文で分かりづらくて申し訳ありません。 明らかに自分の知識および経験が不足しているので、皆様の意見を参考にして 暫くは自力で頑張ってみます。 本当にありがとうございました。
3Dのアプリを作ってみたいんだけど、簡単なサンプルみたいなやつって無いですか? googleで探してもぜんぜん見つからないです
俺の親切なアドバイス:やめとけ
96 :
デフォルトの名無しさん :2007/08/31(金) 15:13:57
Doja5.0で、エミュ上でOpenGLのFloatMath使ってみたんだけど、 SecurityViolation: 37 <clinit> 0 と言われてしまいました。 エミュでもトラステッドじゃないとやっぱだめ?
トラステッド動作設定を忘れてるか jamファイルにOpenGL使う設定を書くのを忘れてるか どっちかじゃない?
10 print"ばか" 20 goto 10 画面中を「ばか」でいっぱいにするプログラムを組んだのですが だめみたいです どうすれば?
多分言語の問題。
他言語をずっとやってると、新しい言語を覚えてもどうしても前のに引きずられるよね
新しい言語に習熟してないうちはそうだね
PHP触ったあとにJavaを触ると、無意識のうちに変数に$をつけてしまう
if(a==1)を よくif(a=1)と書いてしまう
if(a==1)ではなくて if(1==a)と書くようにすると間違って if(1=a)としても文法エラーになるからおk、と書いてある本を見た希ガス でも著者も変態チックな記述法なので自分もやんないって書いてたな
変数同士の比較のつもりで間違えた場合には効果ないしね
>>103-104 Javaはそんな変なことをしなくてもif(a=1)の時点でエラーを返すはず
>>106 そうそう、ちゃんとエラーになるから大丈夫。
でもVBみたいに文法エラーがあると先に進ませてくれない言語はキツイ…
「後でまとめて直そうと思っとるんじゃぁ!」って画面にツッコミ入れそうになるもの。
ちなみに俺の場合はVBから入ってC++やってJAVAに入ったんだが、もうVB忘れたw
そしてVBに戻って勉強しなおすとJAVAを忘れる事だろう…
108 :
デフォルトの名無しさん :2007/09/02(日) 12:14:42
sony music soundをご覧になるにはUIDの取得が必要とか? UIDってなんですか??
ここはアプリを作る側のスレ。 使う側はスレ違い。
ダウンロードした人にjamが置いてあるフォルダを知られたくないんですけど、 jamのアドレスって携帯から調べることできるんですか?
>>111 どうやって調べるんですか?
アプリの詳細情報だとファイル名しか出てなくて・・・。
>>112 機種依存になるが過去の古い機種によっては
jamファイルのアドレスを表示する機種があった。
(503・504時代)
最近の機種はわからない・・自分の機種ではできんな。
Nの903、904は見れたはず
AppTrace=onなら見れる offなら見れない N503, 504は例外
116 :
112 :2007/09/03(月) 22:49:33
情報ありがとうございます。 N902iでは見れないみたいです。(AppTrace=off) 903は白ロム買って確かめてみます。
jamの置いてあるフォルダを知られたくない理由が知りたいな DirectoryIndex対策か?
118 :
デフォルトの名無しさん :2007/09/04(火) 12:19:47
>>97 遅レスすまん。
一応、iαppliTool for Doja-5.0 の『設定→トラステッド動作設定』 で、『OpenGl/ES機能の使用許可』をYesにしているけどだめです。
ADF設定のTrustedAPIDを入力しないとエミュでもだめなんですかね?勝手なんで、そんなものもらってないし。
エミュのTrustedAPIDは桁数だけ合わせて(11桁?) 適当なの突っ込んどけばOKだった気がする。
120 :
112 :2007/09/04(火) 12:44:59
>>117 PCから見られるのが嫌なので。
レンタルサーバでhtaccess使えないんです。
>>120 CGIが使えるようならPerlとかPHPでリモートホスト見て
jamを吐き出すスクリプト書けばいいんじゃない?
有料のアプリなんかは課金チェックや機種判別も含めて
そういう手法取ってるから
jamのアドレスがバレると、リソースの場所も推測されてしまうことがあるから、見せない方がいい。 某ネットワークRPGアプリがAppTrace=onで出したから、シナリオが丸見えになった。
124 :
デフォルトの名無しさん :2007/09/05(水) 11:28:05
RSS読む用のXMLのパーサを今作ってるDoJaアプリにインポートしたいんだけど. 軽くてお勧めなのある?
教えてください。 アプリで画像表示中に音楽(3GP)ファイルを再生したいんですが、 AudioTrackPresenterで間違いないですよね? エミュレータだと代替音楽のような曲が鳴るんですが、 実機だと何も鳴らない… もちろんマナーモードではないです。
AudioTrackPresenterはオプションAPI SH、D、Fのみ対応 非対応機種はUnsupportedOperationException
128を見ていて思ったけど、 BSDライセンスの場合は、サイト内のダウンロードページにライセンス条項を載せるだけでいい?
「いい」ってのがどういう意味かによる もっと具体的に
>>127 ありがとうございます!
Nで試してました…
VisualPresenterを使うとすると、
ネイティブのプレイヤーが起動するから、
画像のバックで音楽再生はできないんでしょうか?
質問させて下さい! 当方ゲームを作っているのですが、サウンドのループでつまずいています。 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("処理が来た!"); } } よろしくお願い致します。
>>132 audio.setAttribute( AudioPresenter.SYNC_MODE, AudioPresenter.ATTR_SYNC_ON );
audio.setMediaListener( this );
audioは取得したAudioPresenter。
SYNC_MODEを設定しないと同期イベントは発生しないかと。
>>134 SYNC_MODEはあくまで同期であって、それを設定しないからといって
mediaActionに処理が来ないわけではない。
>>132 はmediaActionに処理が来ないと言っている。
大方processEventでループしてたりするんじゃない?
サウンドデータの問題かもな 曲が終わってから5分くらいしないとそこに行かないデータが前にあった
138 :
125 :2007/09/11(火) 14:19:40
>128 返事遅くて済まん そのページは知ってたんだが, 2002年の報告だから今はどうなってるのかなぁと思って聞いてみた, ともかくサンクス
>>126 さんに便乗して質問なんですが、
ゲームの中で効果音(1秒くらい)として3gpを再生したいのですがなぜか
ap.play();をしてからどうしても1〜2秒のラグが出てしまいます。
携帯はSH903iなんですが、携帯に問題があるのか、ファイルなのか
仕様なのか何なんでしょうか?
にしてもiアプリの音楽再生に関する詳しいページって少ないですね・・・。
play(1ミリ秒単位)を入れるのねんのねん。 そうすると()内に入れた秒数から音楽がスタートするから タイムラグを解消できるのねんのねん。 機種依存命令だけど903シリーズなら大丈夫じゃまいか。
>>132 メディアアクションはpublic voidじゃ機能しないよん〜〜〜
だってpublic voidは呼び出して機能させるしかないからねんのねん
public classを作ってメディアアクションさせなきゃだめよ。
つまり別のclassを作るってことよ。わかったかしらあん〜〜〜はあと
>>141 言ってる意味がよくわからんが、俺も
>>136 が怪しいと思う。
あるいは別のAudioPresenterをnewしていて、そっちでplay()してるとか?
流れを切ってすみませんが、ご助言願います
以下のように、イメージを右に移動させる処理を組んでいますが、
イメージの移動した跡に残像が残り続けてしまいます。
while(true){
g.lock();
g.drawImage(image, x, y);
g.unlock(true);
x++;
//スリープ処理
}
ループ中に、g.clearRect(0, 0, getWidth(), getHeight());を追加すると解決したのですが、
参考とさせて頂いたこちら(
ttp://www.doja-developer.net/_up/features/UE051011/index.php?id=71 )の
サンプルソースでは、このような処理は行われていないようです。
サンプルソースでは、特に明示的に画面のリフレッシュを行っていないようなのですが、
同じように組んでも残像が発生してしまう理由を教えてもらえないでしょうか?
よろしくお願いします。
>>141 MediaListener実装クラスがpublicじゃないと駄目ってことか?
>>143 描画前に画面をクリアないと前の画面にそのまま上書きするからそうなる
サンプルでは68行目のfillrectで画面をクリアしてる
fillrectはsetColorで指定した色で塗りつぶす
clearRectはデフォルトの背景色で塗りつぶす
>>145 即レスサンクス!
clearRectの先入観があってfillRectが目に入らなかった様です
要するに、実際のゲームアプリ等で応用する場合には
先に背景を再描画してしまって一度画面をクリアすれば良いわけですね
背景が部分描画なら、はみ出した部分クリアしないと残るけど 全画面背景描くならクリアする必要ない っていうか背景描いた後に画面クリアしたら背景消えちゃうぞ
>147 多分意味は通じてると思うぞ >146の頭の中では 背景を再描画する=画面をクリアする って意味なんだろう まぁ>146の言い方が悪いんだけど初心者だしな
149 :
139 :2007/09/12(水) 19:13:58
>>140 今ちょっと試したんですが、やっぱり開始は遅く音が途中から再生されただけでした。
そもそもこの音はwavで作ってSoundEngineで無音部分を完全に切り取り、
3GP Converterで変換してるので一応ファイルの中にラグは無いはずなんです。
ただ3GP Converterで最初やったときなぜかデータが途中までになってしまい、
しょうがなくwavのケツにちょっとだけ無音を足して、途中で切れても音は聞こえるようにした。
という経緯があるので、ここが怪しいかな・・・?とは思ってるんです。
誰か同じようなことあった人居ますか?
150 :
デフォルトの名無しさん :2007/09/13(木) 04:35:44
便乗で質問させていただきます.
>>128 で紹介されているライブラリの
kxml2-min-2.3.0.jar
をDLし既存のDoJaアプリに追加してみたんですが,
追加下だけのときは問題ないのに,
実際参照すると,start()を内包するクラスが見つからないと
実行時エラーが起こり,
携帯のエミュレータが一瞬だけ出現してきえてしまいます.
外部Jarの追加はプロジェクト右クリックの「ビルド・パスの構成」から
外部Jar追加ボタンで参照したのですが.
間違ってたり抜けがありますでしょうか.
どなたかお願いします.
答えるわよ―!
>>150 DoJaが外部Jarに対応してない気がする
ドージョ ドージョ
>>149 それは携帯での動作?
エミュだとPCによると思うけど処理速度ムチャクチ遅いときあるわよ
音楽に限らず画像の処理速度も携帯とPCじゃ大違いだわ
155 :
149 :2007/09/13(木) 21:08:08
>>154 実機です。エミュだと変なピアノ曲が出るんですよね・・・
Eclipse 3.3でも使えてる?
>>155 ドコモとしては、効果音はmldを使え、勝手アプリ作者はシラネだろう。
158 :
155 :2007/09/14(金) 19:21:57
>>157 マジすか・・・
ADPCMだと3gpより容量食うくせに音質死ぬほど悪いんすよね。
Doja5携帯ってADPCM何Hzまで使えるんですか?
あくまで携帯なんだから低機能を生かしたアプリ作らんと
>>158 ADPCMはたしか音源チップに依存していて、DoJa5.0でここまでという決まりはないはず。
でも勝手アプリなら、wav2mldやYamahaのツールの制限を考えて、モノラル、16bit、16kHzくらいじゃね。
161 :
155 :2007/09/15(土) 13:30:59
>>159 とあるスーファミソフトを移植中でして・・・忠実に再現したいんですよ・・・。
>>160 回答ありがとうございます。
そうですか・・・いっそwav2mldを自前で とも思ったんですが、ツールでやってみます。
お世話になりましたm(_ _)m
忠実に移植して著作権侵害にならないんですか?
AFO?
坂田師匠のことかー!
165 :
その1 :2007/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 :2007/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 :2007/09/18(火) 20:12:44
自己解決しました。
プリミティブってなんですかぁ?
点と線とポリゴンのことです
>>167 よく読んでないけど何がどう解決したのか知りたい。
どう考えてもこれだろw >gl.glMatrixMode( GraphicsOGL.GL_PROJECTION ); >gl.glLoadIdentity();
172 :
165 :2007/09/19(水) 12:37:32
正解: ・指摘されている通り、射影変換マトリクスが単位行列なら、Viewport変換のためにメッシュデータは[-1,...,1]に正規化されてなければなりません。 ・DrawArray() と、DrawElements() の int count パラメータが、プリミティブ数でなく頂点数でした。 ついでにもう一つハマッタのが、glBindTexture, glTexImage2D やっただけではテクスチャーが貼られず、glTexEnvfやTexParameterfでテクスチャーステートを設定しないとだめ。
173 :
デフォルトの名無しさん :2007/09/22(土) 16:53:30
機種依存のAPIの情報は、公式サイトにあります
175 :
デフォルトの名無しさん :2007/09/22(土) 18:49:49
ありがとうございます。 灯台もと暗しですね。問題はGraphics2ではないみたいですね。 しかし、他に機種依存な部分は見あたらないんですが・・・。 もう少しソースを見直してみます。
内容からいっていろいろ計算使ってそうだけど、CLDC1.1の機能使っていながら 1.0機種を対象OKにしてるとかそんなことないの? つまりfloatとかdoubleとかMath使ってないか、ということだけど
177 :
デフォルトの名無しさん :2007/09/22(土) 20:33:57
いえ、floatもdoubleもMathも使わず、intとlongと自前関数のみで作ってます。
178 :
デフォルトの名無しさん :2007/09/22(土) 20:37:36
なぜだか、P903iはOKで、SO903iやF904iなどでエラーが出るようなんです。
東大元暮し
// エラー デバッグ ブラウザ ツール
//
http://www.mozilla-japan.org/ // シンプル プログミング ツール
//
http://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();
>>178 勘なんだけど、Javaヒープとネイティブデータヒープにメモリーが分かれてる機種って
リソース不足になりやすくてエラーが出るんじゃないかな?
なぜメモリーに余裕があるはずなのにメモリー不足になるのかは意味不明
考えられる対策は a[50000] まで使う配列なら余裕もって int a[]=new int[60000] と宣言してみるとか
ガーベッジコレクションを使う手とかあるけどこちらは重くなるから実用的じゃない
でもこれらで解決するかは不明
そもそも端末の仕様のバグなのにいつまでも修正しないメーカーが悪い
>>174 公式には900の一部の機種までしか情報が開示されてないんだよね
>>178 起動エラーとアプリ(aマーク)エラーは別なんじゃない?
プロファイル定義ミスで、ダウンロード対象から外れて怒られるとか
そういう類のエラーを想像してた
まあ173はもうちょっと自分で具体的に何のエラーかぐらいは突き止めんと無理だわな
そっか 起動できないってあるからな だとするとスクラッチパッドにlengthつけてないとかか? いずれにしてもヒープフラグメントとかいうメモリの問題だけど
187 :
デフォルトの名無しさん :2007/09/23(日) 14:22:35
起動直後に「エラーが発生しました」と表示されるらしいのですが、 この場合、@対応していない命令が含まれていた。 もしくはAヒープメモリ関係。 が原因と言っていいんでしょうか。
っ 例外をcatchして表示させてみる
catch出来ない部分で落ちてる予感
190 :
デフォルトの名無しさん :2007/09/23(日) 15:33:19
当方の機種(P903i)ではエラーが出ないので、 catchもできないんです。
191 :
デフォルトの名無しさん :2007/09/23(日) 15:40:03
>>190 そりゃ当然catch入りバージョンをエラーの出る機種で動かさなきゃ意味ないでしょ
トレースの結果はどう出てるんだ? それ次第って気がするが
俺の勘がソースを良く読んだら解決しちゃう系 なんじゃねーかと告げてるw
コンストラクタかstart()の中で無茶なことしてんじゃねーかなに1票
196 :
デフォルトの名無しさん :2007/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;} } 〜〜〜 }}
>〜//同様な配列宣言 ここで大きい配列用意してるとか トータルで大きい容量になっちゃってるとか
エラー状況をもっと詳しく調べるんだ! 「起動時にエラー」じゃ曖昧すぎる。 D902iだとFallSは普通に動くが、WaterPが「毎回、起動して5秒後」に落ちる。
質問 環境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ファイルの書き込みも許可墨
>>199 196もだけど、ちゃんと原因の切り分けをしないとだめ。
ClassName.closeIApplicationのメソッドの中身を確認する。
あと、例のソースでは、outはcloseされるけど、dosがcloseされていないから、リークするかもしれない。
アドバイスd,これからはdos閉じてからout閉じるようにします 自分なりに切り分けたつもりで検証した結果 OutputStream out = Connector.openOutputStream("scratchpad:///0"); の時点でぬるぽらしく,そのままcatchされている模様 ClassName.closeIApplicationの中身はすっからかんで public void closeIApplication(){ saveIApplicationData(); IApplication.terminate(); } という具合です
あ,saveIApplicationDataというのが199で書いたソースのあるメソッドです
posやlengthを指定してみるとか。 スクラッチパッドのcloseし忘れがないか確認するとか。
closesし忘れてもビルド時にエラー出ないんですか?
ロジックの追跡と妥当性を検証してくれるビルドツールか プログラマは種まいて見てるだけー
206 :
デフォルトの名無しさん :2007/09/24(月) 22:49:18
>>198 「毎回、起動して5秒後」に落ちる。
メモリ周りしかないですかね。
自機でエラーが再現できない以上、とりあえず
白ロム買ってみようかと思います。
207 :
ラgたくまチャン :2007/09/24(月) 23:01:07
簡単簡単
つーかそこまでする必要あるか?商売でやってるわけじゃなし はっきりいって規格を統一しないメーカーが悪いんだし 売り上げに響くからか ろくに機種依存情報も出さないし(901以降は全然出してない) ハードに問題あるならどうしようもないよ
209 :
198 :2007/09/25(火) 03:01:59
>>206 900シリーズとかならともかく、最近の機種でメモリ不足って考えにくくないかな。
例外をcatchするバージョンを実機で試すくらいは手伝うよ。
そもそもD902iでWaterPが落ちるのと、FallSの問題は無関係かもしれないが。
>196 Canのコンストラクタにあるload()って何やってるの? このタイミングでスクラッチパッドにアクセスしちゃダメだよ。 コンストラクタでは通信やリソースへのアクセスとかの複雑な処理をしちゃダメ。 機種依存で上手くいくこともあるけど基本的にはやらない。 コンストラクタはエラー返さないし例外が発生してもcatchしようがないから これが原因ならシステム側でエラー処理されるよ。
>>210 いやコンストラクタの中でだってcatchは出来るだろ
まぁ処理にしくじったら即terminate()呼ぶなり変数で場合わけして内部を状況表示に切り替えるなり色々やりようはある
俺としてはスレッド使ってるからちゃんとsynchronizedするのを忘れてて各種変数が壊れてるってのを予測してるけど
特に特定の割合や特定個所で出るけど例外補足に失敗するってパターンはそれが多いよ
自分ではスレッドを使って無くてもCanvas.processEvent()とかをsynchronizedで括り忘れると
実機ではもうどんなバグが出てもおかしくないし
まぁprocessEvent()系を全く使ってなかったら判らんけど
212 :
199 :2007/09/25(火) 15:00:16
>>203 dクス!
read側で201同様DataInputStreamをcloseしてなかったのが原因でした
言い訳するとDoja3.xの頃に作った頃はこれで動いてたんです・・
213 :
デフォルトの名無しさん :2007/09/25(火) 23:32:00
>>209 ありがとうございます。デバッグver.はほんの少し時間を取れたら作ります。
ところで、落ちたのは何か表示がされた後なのでしょうか?
>>210 load()はsaveした変数値を読み込んでいるだけです。(それほどボリュームはないかと。)
>>211 うむむ、key処理でprocessEvent()は使ってますが、synchronizedは全く使ってないですね。
>213 load()について。 >saveした変数値を読み込んでいるだけです。 てことはスクラッチパッドにアクセスしてるんだよね? >210はそれだとダメじゃないかと指摘している。 処理のステップ数や読み込む量は関係ない。 今回の問題の原因ではないかもしれないが、いかなるコンストラクタでも デバイス機能の操作(スクラッチパッド、通信、音声、カメラ、描画更新など)は しないのが常識だと自分では思ってたんだけど…どうなのかな。
>>213 processEvent()をsynchronizedで括っておくのは基本
processEvent()がイベントごとに別個のスレッドで呼ばれるか同一のスレッドでキュー処理して呼ばれるかは実は機種依存
jguidefordoja5_x_070423.pdfの86ページ
イベントごとに別個のスレッドで呼ばれる機種の場合processEvent()処理中に再突入されることを考慮に入れなければならないし
またCanvasをThreadで処理してる場合processEvent()のスレッドと並走することになるのでprocessEvent()から呼んでるメンバは全て
synchronizedである必要がある(まぁこちらは当然処理してるとは思うが)
>>214 コンストラクタでやるのが悪いんじゃなく初期起動メソッド(start()やstartApp())の記憶違いじゃね?
コンストラクタそのものは何をやろうと関係ないよ
それも短くしなきゃいけないって決まってるのはMIDPの仕様(ディスパッチャ停止を避けるため)だったと思った
DoJaには関係なかったはず
> processEvent()をsynchronizedで括っておくのは基本 Javaの基本って事?それとも携帯アプリでの基本って事?
>processEvent()から呼んでるメンバは全てsynchronizedである必要がある(まぁこちらは当然処理してるとは思うが) ちょっと気になったんだけど、processEventがsynchronizedになっている場合 processEventから呼んでいるメンバは自動的にsynchronizedがかかっているのと 同じ挙動にならないの?
>>217 ならない。
なぜなら、synchronized修飾子でロックされるのは指定したオブジェクト
(指定しない場合はthis)であって、メソッド本体ではないから
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
公式エミュレータ(Doja5.0)でストレージデバイスにデータを保存するアプリをエミュレートした場合
ストレージに保存したデータがどこに在るか知らない?
>>219 Doja3.5,4.0はアンインストール済み?
>>219 一端アンインストールして、別ユーザーでログインしてそっちでインストールしてもだめ?
>>220 公式資料によると、C:/iDKDoja5.0/lib/storagedevice/xxx
224 :
198 :2007/09/26(水) 18:18:40
>>213 波が動き始めて5秒後にαエラー。
その間、helpの表示、設定の変更や保存は正常に機能してるっぽい。
>>222 別ユーザでやってみましたが、やはりダメですね。
javacのバージョンは? DoJa5.0のマイナーバージョンは?Eclipseの場合だけど、特定のバージョンだけ起動できなかったことがある。
>>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 :2007/09/26(水) 19:23:44
>>229 D902iで、WaterP v4、WaterP2ともにαエラー発生。
ALERT: java.lang.OutOfMemoryError
FallS v1は問題なく動きますな。
231 :
229 :2007/09/26(水) 23:31:03
>>230 予想通りのエラーですね。
ということで、対策デバッグ版アップしました。(同ページにて)
・System.gc()を初期化後に実行する:WaterP3
・定期的に実行する:WaterP4
processEventにsynchronized付けるとキー入力が遅くなると思うんだが。 processEventにはsynchronizedをつける必要ない設計するのがセオリーなんじゃないの? と公式アプリつくってる者の意見でした。
paintをsynchronizedする人なら見たことあるけど、processEventはないな。
>>216-218 何か話が噛み合ってない気が…
以下2メソッドは同意。
public synchronized void processEvent(){
//...
}
public void processEvent() {
synchronized(this) {
//...
}
}
synchronizedを指定したオブジェクトに対して、別スレッドから参照が行われた場合、
synchronized対象のロックが切れるまで、別スレッドは待ち状態になる。
2つのスレッドからprocessEventが呼び出されたとして、
先に呼び出されたほうがthisをロックする。
後から呼ばれたほうはthisのロックが解除されるまで待ち。
thisのロックが解除されるのはsynchronizedスコープの後なので、
その間呼び出されるメソッドもロック中と同等の動作になる。
>processEvent()から呼んでるメンバは全てsynchronizedである必要がある
これはちとオーバーじゃないかね(´・ω・`)
235 :
デフォルトの名無しさん :2007/09/27(木) 18:05:22
ちょっと教えてください iアプリを作って配付する場合 microSDに入れて配付とかした場合、アプリを起動できないですよね? ネット上から落としてもらうしかダメなんですかね?
うん、そう。
237 :
デフォルトの名無しさん :2007/09/27(木) 18:29:16
なんとかやり方ないのかねえ まあネット上に置いてあったからってだれかれ構わず見つけて落とされることはないと思うけど できれば配付した人を特定しておきたいからminiSDなりmicroSDなりで配付したいんだけどなあ
DL時に特定できるように会員認証でもつければ良いんでないの? それくらいのCGIは書けるでしょ
>>231 WaterP3は5秒でOutOfMemoryだが、WaterP4は落ちなくなってた。
ただ、2〜5秒ほど動いては1秒以上停止(おそらくGC)するので、
アニメーションがウリのアプリとしては致命的だろうな。
> それくらいのCGIは書けるでしょ
>>219 doja.exeをダブルクリック等で直接起動させたときに動かないのか?
それとも、バッチファイルやコマンドプロンプトから -i や -j などの
オプションをつけて起動したときに動かないのか?
>>237 先に配布予定者の端末IDを聞いておいて、それに適合する場合のにDL可能ってどうよ?
じゃあ白ロムにアプリを移すのも無理なんですか?
配布した人を特定したいのにminiSDで配布出来たら、その時点で意味ないだろ。 やるならシリアルナンバーでも配るしかないな。
245 :
デフォルトの名無しさん :2007/09/27(木) 22:37:13
>>237 SDにキーデータファイルを入れて、
それがなければ初回起動できないようにするとか。
>245 何も知らなければ全部コピーすると思わないのかい。
>>245 そこまで自由度のあるSDへのアクセスそのものをiアプリからはできないわけだが
まぁ実用的に落とした人を断定しておきたかったら落とす場所を
携帯でアクセスしか出来ないようにした上にBASIC認証にでもして
落とせる人、一人一人にIDとパスを割り振った上でアクセスログを取って
明らかに不特定多数からそのIDとパスが使われてたらそのIDとパスを停止する形にするとかかな
むしろSDに入れて配布なんて方法の方が中身の全ファイルをzipで固めてどこかにアップされれば
完璧アウトな上に流通を止める手段がないよ
質問させてください。 iアプリでソケット通信をする事は可能ですか? 調べていると出来ないように感じたのですが、その場合自前で用意したサーバにアクセスするにはHTTPで接続しにいくしかないですかね?
>>219 関係あるかどうか判らないけど。
うちは1.4.2でDoJa入れたら駄目で、
今は1.5.0_12でチャンと動いてる。
>>251 やっぱりそうですか。
ソケットを使って書いていたので、何かいい方法がないか、それともCGIやJSP等の方がいいのか検討してみます。
ソケット通信でも自分でHTTPヘッダを処理してやれば大丈夫なのかなぁ・・・。
色々調べてみます、ありがとうございました。
>>249 iモードはソケット通信できないよ
HTTP通信はOK
HttpConnectorとか読んでみ
まさか
>>252 >D505 i,D505 iS,D506 i,D900 iに実装している。
全部糞端末じゃねぇかw
259 :
231 :2007/09/28(金) 20:54:05
>>259 WaterP5でもOutOfMemoryだった。
計算して線を描くだけならメモリ食わないと思うんだが。。。
すみません、Eclipse3.2、または3.3にて、エミュレータが起動した瞬間に落ちてしまうようになりました。 ビルドでエラーは出ず、JARファイルは生成されています。 DoJa5.0ツールで直接ビルド、起動した場合は正常に起動、動作します。j2sdkはは1.42です。 Eclipseを介してビルドした物はDoja5.0ツールから起動しても落ちます。 また少し前まではEclipseでも正常に起動していました。(ただし途中で落ちてました。) 何か設定を弄ってしまったのかもしれませんが、Eclipseに明るくなく、対処方法がわりませぬ。 思い当たる節があれば是非教えてください。
Stringの中身を消すとき str="";とstr=null; ってどっちの方がメモリ節約できますか?
消すという概念自体がjavaに当てはまらない気がするが ガベコレに拾ってもらう上で""(空文字)オブジェクトが生成されない str=null;の方が節約って意味では確実なんじゃない? str="";は結局str=new String("");って事だから古いstrの中身は消えるだろうけど 新しいStringオブジェクトが生まれてるよ
264 :
259 :2007/09/29(土) 01:13:49
>>260 そうでしたか。
getImageでImageをpaint内で生成しているのが原因かと思ったのですが・・・。
(描画の重ね合わせに、Graphics2.setRenderMode()と合わせて使用)
色々調べてみたところ、
さらにImageをdisposeしていないのがまずいような気がしたので、
getImage前にdisposeするようにしてみました。(WaterP6)どうでしょう。
あと、このgetImageをスイッチできるようにしました。
>>263 文字列リテラルはクラスがロードされたときに生成されて、
str = "";
は str がそれを指すようになるだけ。
そのたびに新しい String オブジェクトが生成されたりはしない。
266 :
261 :2007/09/29(土) 02:06:39
すみません、自己解決しました。 デバッグの仕方を勉強して実行したたところ、 ALERT: java/lang/ClassFormatError: Bad version information. が出てて、JRE1.5でビルドされているのが問題のようでした。コンパイル設定変えたら動きました。 1.4のbinフォルダにパス通したのはエミュレータ動作用だったのかな。 スレ汚しすまそ
>>261 3、4回、マイナーバージョンの違うDoJaを交互にインストール・アンインストールして直ったことがある
Eclipse 3.2.0 + Windows Vista + JDK 1.6
>>264 D902iでWaterP6テスト。
blurをonにした瞬間、NullPointerExceptionで落ちることがあるのはご愛嬌として、
OutOfMemoryは起きなくなったみたい。
たしかに毎フレームGraphics2#getImage()はメモリ食いそうだなぁ。
>さらにImageをdisposeしていないのがまずいような気がしたので、 脱力系のオチかよ
270 :
264 :2007/09/29(土) 09:01:18
>>268 よかった。
getImageで上書きされるものと考えていたのが問題でした。
普通の使い方ならば、ガーベージ自動処理のタイミング的に大丈夫なのでしょうね。
他のアプリにも同様の処理をしているものがあるので、
アプリの機種違いによるエラーは、これで解決しそうです。
(アプリ_FallSのエラーは、現行ver.では起きないようなのでOKです。)
お手伝いいただき、ありがとうございました。
毎回getImageするより、オフスクリーンバッファを2枚用意したほうがいいんじゃないか? Imageの描画コンテキストはGraphics2にキャストできないんだっけ?
272 :
デフォルトの名無しさん :2007/09/29(土) 14:42:06
Imageに対して直接Graphics2の描画(加算レンダリング)をするって事ですよね? 確かにその方法は良いと思います。 できるのであれば、どなたか教えてください。
>>272 確かにその方法は良いと思ったんなら、まず自分でやってみろよ。
良いと思うほどなんだから実現の可能性があることは自分でも分かってるんだろ?
教えてくださいじゃなくて、コード書くのが面倒なのでかわりに書いてくださいじゃないのか?
ってか、いきなりレベル低くなったな
275 :
272 :2007/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()よりは軽くなったはず。(多謝)
他人のアプリのそんな細かい部分を語られても さっぱり分からないが、動いたのならおめでとう。 それにしてもモーションブラーが実装できる時代になったんだなぁ。
最近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(); } } } }
うん?どこでスレッドを作ってるんだ?スレッドを作ってるようには見えないが・・・
>>277 スレッドが作れて無いようだが?
基本的にThreadクラスから継承するんじゃないならRunnableインタフェースを実装しなきゃだし
スレッド実行開始はThreadクラスのstart()だがスレッドの実体はどっち方法で実装してもrun()だぞ?
後Canvasのpaint()はabstractだから省略できんだろ、例として書くならそこも簡単でイイから書きなさい
一応IApplicationのstart()とCanvasのイベントメソッドが別スレッドになるかも?というのを使って
IApplicationのstart()でCanvas内の無限ループメソッドを使ったメインループ作成方法はあるけど
これはスレッドを自分で作ってるとは言わないし機種に依存するはず(動く場合が多いけど)
280 :
277 :2007/10/01(月) 17:35:39
あれっ、本当だ…。Runnableが実装されてませんね…。 よく考えたらスレッドを作成して動かしてるのはVアプリ用の方でした。 こちらの方法はスレッドじゃないですね…失礼しました。 しかも279さんの仰る通り簡略化しすぎてました…。 とは言えせっかくなので教えて頂ければ幸いなのですが (改行エラーが出たのでソースは次に書きます) →ソース という感じで作っています。この場合、自分は a_test.start(); によってtestCanvas内のstart()メソッド が一回だけ実行され、その中の無限ループでグルグル処理をするっていうイメージで作ったんです。 しかし実際にはtestCanvas内のstart()メソッドが何度も実行されているようなのです。 物凄い勢いで”実行中”というトレースを吐き出します…。 質問自体分かりづらくて申し訳ないのですが、なぜtestCanvas内のstart()メソッドが何度も呼び出される のか、ご教授願えれば幸いです。
281 :
277 :2007/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){ //描画 } } }
>IApplicationのstart()でCanvas内の無限ループメソッドを使ったメインループ作成方法 Fの505,506,900でこれやると、processEventとmediaActionに処理こねぇ(ノд`)
Eclipseのデバッグモードで確認すれば一発
>>280 これ実機の話か?
取り敢えずDoJa5.0のエミュ上だと"実行中"は1度出力されるだけだ
a_test = new testCanvas();
の前に
System.out.println("起動");
a_test = new testCanvas();
ってやるとどうなる?
IApplicationのstart()がループしてるのか、Canvasのstart()がループさせられてるのか切り分けてみ
あ、後当然ながらstart()とprocessEvent()の両方からアクセスしてるメンバは全部synchronizedになってるよな?
>>282 マジ?
ずばりこのやり方で作りまくりなんだけど、、
Fの901以上とか700は大丈夫なの?
>>286 この手法って機種依存じゃないの?
IApplication.start()がCanvas.processEvent()とは必ず別スレッドで呼ばれることが保証されてるってどっかドキュメントに書いてある?
288 :
282 :2007/10/02(火) 02:51:23
>>286 実は端末がなくて、そこまで調べていない。
とりあえずデバッグ時に、手元にあった上記の三つは動作しなかったので
直した。その他の端末は、修正後に検証センターで端末チェックしたので
その他のF機についてはわからない。
289 :
286 :2007/10/02(火) 06:45:39
>>282 >>287 10K制限の時から気にせずやってたけど、
今は容量制限もゆるいし普通のやり方が一番安全ですね。
俺もstart()で無限ループやりまくってるw リリース前にゃ全端末チェックして貰った事もあるけど 問題なかったなぁ。ユーザからクレームも上がってない。 んまぁ音鳴らすアプリが殆どない上processEvent使ってないし 気づかなかっただけかもだけど。
過疎ってる(゜Д゜)
おうよ
ネット上のAPIリファレンスの見方を教えて下さい 全然分かりません
それはまず Java の勉強をするべきでは?
>>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アプリは作れるだろうけどね
初心者用のjavaの勉強は5年もしました しかしDojaのAPIリファレンスは難解すぎて理解できません もうやめます
Java で5年間何をやってたのか気になるところだな。
5年間ずっとjava初心者用HPのサンプルコードのコピペを続けてたのだろうか? それはそれで根気があるが……
ネタだろ。 数年前に一週間程度java勉強しただけの俺でも何とか分かる。
しかしそれは本来のJavaでなく携帯向けJavaだったのだ
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄」 ―――――――――――――‐┬┘ | ____.____ | | | | | | | ∧_∧ | | | |( ´∀`)つ ミ | | |/ ⊃ ノ | |  ̄ ̄ ̄ ̄' ̄ ̄ ̄ ̄ | ミ [本来の Java]
>302 携帯向けのJavaが偽物みたいにいうな禿
携帯向けのJavaなんて存在しないんだけど?w
JavaME
CLDCとMIDPの立場って一体……
携帯向けのJavaってソースに #ifdefとか#defineとか入ってる奴?w
無知だな
>>308 30Kに収めようと思ったり機種依存APIを使うために場合分けが必要な場合(Unable to load class回避)には
必要に応じてプリプロセッサも使うけどな
まぁそれも初心者にはあまり関係ない話だ
プリプロセスできれば、と思うことは何回もあった
30KiBの壁にあたったとき、プリプロセッサ使って3KiBくらいちんまく なったときには、純粋なJavaと決別しようと思ったさ。
KIBだんご
プリプロセッサってクラスファイルを小さくしてくれるの? あ、でもなんか単位が違うなぁ
Kを1000じゃなくて1024であることを明確に示したいときにはKiって書くのよ。
それ何業界で使われてるの? ストレージ関連? こっちでは単に KB て入ったら 1024 bytes 以外の可能性はないなあ。 M が 1000^2 じゃなく 1024^2 であると示したい場合は MeB?
でもあんまり浸透してないよなぁそれ・・・ キビバイトとかメビバイトとか言いにくいからかな
KIBだんごが正しくてワロタ
純粋なJavaなんてこだわってるのは信者だけ そろ信者と頭の古いsunのせいでそれはいるだろって機能でさえ C#がでるまで入れようとしなかったくらいだから迷惑な話だよな
いきなりどうした?
つまり、プリプロセッサを公式にサポートしろと言いたいのですよw
>>315 組み方によるがプリプロセッサに頼った方が小さくなる
例えばstatic finalは#defineに置き換えれば大抵の場合クラスファイルを縮小できる
まぁ色々あるんで一概にどうこうとは言いにくいんだが読みやすさを損なわないレベルで小さくなる場合が多いのは事実だな
ただ初心者にはお奨めはしないけどな
Obfuscatorを2〜3個と7Zipも使ってもどうにもならない場合の最後の最後の手段だな
>318 言いにくいからというより、単純に通じないからだろうな。 メディアや様々なドキュメント類が一斉に変えない限り普及しないんじゃないだろうか。 現状、ドキュメントなら大抵「1キロバイト=1024バイト」とか注意書きがあるんで混乱しないし、 1キロバイトが1024バイトなのはファイルサイズやメモリ容量、 1000バイト(というか1メガバイト=1*1000*1000バイト)なのはストレージ(大抵HDDを指して)、 としてまず問題なく会話できるし。
最近の人は「キロ」と「ケー」の区別をつけないのか
HDDさえ1024単位にしてくれりゃ会話でまぎらわしいことは かなり減ると思うけどな。
通信速度が10進数だから,そっちを基本にするしかないだろ
10進数で通信速度を測定するのって何の通信?
話切って申し訳ないですが、質問させてください。。 904iシリーズで追加されたオプションAPI、 「動作認識」を実装しようとしてるのですが上手くいかず困ってます。。 最初はとりあえず、ケータイの傾き(rolldata)を取得し、 その値を画面に表示させるコードを書こうとしています。 プログラミング初心者のため、かなり汚いコードだとは思いますが、 指摘いただけるとうれしいです。
331 :
330 :2007/10/14(日) 21:33:46
public class Gesture1 extends IApplication { public void start() { GestureCanvas c = new GestureCanvas(); Display.setCurrent(c); c.exe(); }
332 :
330 :2007/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 :2007/10/14(日) 21:36:04
//最後 try { Thread.sleep(200); } catch (Exception e) { } } } public void paint(Graphics g) { } } } //長々とすみませんでした。。。
機種は? 確かDだけ何か違ったとか報告受けた覚えがある。
335 :
330 :2007/10/14(日) 22:16:48
SH904iです。。 エミュレータで試験できないので、実機にアプリをDLして実行してみているのですが、エラーの表示と共に強制終了されてしまい原因もわかりません。。。
Exceptionでエラー確認してみ
337 :
330 :2007/10/14(日) 22:32:37
338 :
330 :2007/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
このようなエラーが出ますが、未熟者のため解決できず。。。
とりあえず、運良く会社から持ってきてた俺自作のソース見ると m_RollReader.start(); m_RollReader.recenter(); はwhile() の上に出して1回だけにした方が良さそう それでもダメなら m_RollData.getImmediateMotion(); の方のパラメータも変なの来てるか確かめれ。 もちろんExceptionもなw
340 :
330 :2007/10/14(日) 22:41:44
>>339 ありがとうございます!
がんばってみます。
341 :
330 :2007/10/14(日) 22:48:11
>>339 一つ質問なのですが、
rolldata.start()
をwhile外に出すとすると、
rollreader.stop();
の位置が問題になると思いますが、
一回一回の処理ごとにstopかける必要はないのでしょうか?
というか、もしかしてstop()自体なくても、動作に支障はないのですか?
大きい範囲で1回であればいるかもしれんけど、 枚フレームする必要は無いな。 まぁ、経験上カメラとか外部のインターフェース使う奴は 動作が遅いのが普通だから毎フレーム呼び出しは 無理な場合が多い。
マナーモードや受話音量の制御ってアプリ側からは出来ないですかね?
できちゃったら本末転倒 アプリや本体の挙動を制御するための機能なんだから
>>341 JSや加速度センサは、start()時の位置を(0,0(,0))として、
次フレームでゼロ地点からの相対位置を元に何かを求めるモノなので、
基本動きっぱなしを想定してる。
なので止めちゃダメ。
あとDoJa5.0 Ver3.0のiαppliToolで、エミュレーションにも対応してる。
ツール→動作認識データ編集と、ツール→加速度センサデータ編集がそれ。
使い物になるかは少々疑問だけど、とりあえずの動作確認だけならエミュで十分なハズ。
パラメータを設定しなくても、エミュで例外は出ない。
ゼロが帰ってくるだけ。
たしか移動量の定義がShake以外不明だったと思うんで、
実機でやってみないとわからない部分が多いと思うがガンガレ。
何か酷いな… JS→ジェスチャーテックのことで略してJSと何処かに書かれてて そう覚えてしまった(´д`) ゴメン。 帰って→返って ちとマグロでも釣ってくるわ。
347 :
デフォルトの名無しさん :2007/10/15(月) 13:12:40
なあ、@アプリで再生できる動画サイズって500KB以上は無理なんか?
確かDojaのバージョン依存とみせかけて機種依存だったと思った。 俺の仕事じゃなかったから適当に聞いてたんでうろ覚えw
349 :
デフォルトの名無しさん :2007/10/15(月) 13:36:29
お、機種依存なのか
351 :
デフォルトの名無しさん :2007/10/15(月) 14:17:48
機種によっては500kb以上いけるかもしれないが Doja5.0では500kbまでしかだめだ って書いてあるようなないような
500KBまでは全機種で動くことを保証してそれ以上のサイズを放り込んだ時動くかどうかは機種依存ってことだろ?
353 :
330 :2007/10/15(月) 15:42:57
>>345 ありがとうございます。
エミュレータの動作認識設定を行い、何とかエミュ上で立ち上がるまでになりました。
しかし、実機に移すと、エラーが起こり、アプリが立ち上がりません。。。
どうしてでしょうか。。。。。
354 :
330 :2007/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 :2007/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 :2007/10/15(月) 15:45:54
//さいご try { Thread.sleep(1000); } catch (Exception e) { } } } public void paint(Graphics g) { } } }
>330 ソースよりもまずエラーの内容を書かないと始まらない
358 :
330 :2007/10/15(月) 16:28:37
>>357 指摘ありがとうございます。
エラーの内容ですが、実機だとただ単に強制終了されてしまうため、
どのようなエラーが発生しているのかもわからない状態なのです。。。
エミュレータではエラーは出ないのですが・・・
何度も質問ばかりで申し訳ありません。
AppTrace=on にしてみれば実機でも見れるんじゃね? それと roll の null チェックはした方がいいな。 機械動かす以上すぐにパラメータが取れるとは思えない。
360 :
345 :2007/10/15(月) 21:09:43
マグロ漁行ってる間に職場がアク禁食らってた(=´∇`=)
これだからNTT回線は…
>>330 たぶんRollData#getRollData()をtry〜catchで囲んでないからだと思うよ。
パラメータ取得失敗時に、普通に例外吐く仕様だったはずだから。
ぬるぽチェックはzahyoの定義で初期化してるから要らないと思うけど、
例外キャッチした時に前のパラメータが残るのだけ注意。
相対座標として扱うと計算ミスる。案外使ってて違和感感じるから。
で、例外についてはリファレンス読んでくださいな。
拡縮/回転ができるスプライトシステムを作ろうと思いポイントスプライトでいろいろ 実験しています。どうも画像が歪むのでテクスチャを格子模様にしてどういうときに 歪むのかチェックしたのですがいま一つ条件がわかりませんでした。uvwhのぞれ ぞれが2のn乗になっていない時かなとも思いましたが64*64でも1ドットだけずれて 表示されたりしたのでよくわかりません。 WEBでサンプルソースを見つけたのでそちらも試したのですが、一見ちゃんと表示 されているようでも右端と下端のドットが表示されていませんでした。 ポリゴンでフィールドを表示しておいてその上にdrawImageで各種情報を表示する ような(フィールド側は拡縮可能)構成を考えていたのでちょっと悩んでいます。 なぜ歪むのか原因、もしくはプログラム上/データ上のチェックポイントがわかる方 がいらっしゃいましたらご教示願えないでしょうか。
歪むとかいってるのはエミュでの動作の話? 昔同じようなことやったことあるが、マスコットカプセルの ソフトウェアレンダリング(901時代とか)は、内部で2pxとか4px単位で 処理してるのか画面上とテクスチャの大きさをあわせても そのままdot by dotのマッピングにはならないと判断した 最近のハードウェアレンダリングする機種では結果違うかもしれんよ
363 :
361 :2007/10/16(火) 12:52:53
>>362 情報ありがとうございます。
エミュと実機両方で試しましたが、同じような表示になりました。
矩形の枠の一か所だけ1ドット飛び出したような表示になったりしたのですが、その
飛びだす位置が同じだったので同じアルゴリズムなのかなどとちょっと感心しまし
たが。
書き忘れましたが900i以降対応させるのでDojaのプロファイルは3.5です。
試した実機は対応する機種のミニマムスペックに近いF900iやN901icなどの古めの
ものです。
ポイントスプライトをやめて三角形や矩形のポリゴンにしたらどうかな、などと考えて
ましたがソフトウェアレンダリングによる歪みというか誤差だとするとだめっぽいです
ね。やりたいことの性質上、きっちり1ドット単位で表示できないと困るので面倒だけど
drawImageとdrawScaledImageでやろうかな。D900iを非対応にすればGraphics2で
半透明使えるし、回転はほとんどないからなんとかなるかも。
小数使ってる? 0.5を足してから整数化するとか。
ピクセル毎に自力処理か。 どっちを回してる? スプライト側のピクセル毎に回転後座標を求めてキャンバスに打つより、 キャンバス側で「スプライトのどのピクセルが来るか」を基に打つといいよ。
drawScaledImageに半透明が適用されるかどうかは 機種依存じゃなかったっけ?
367 :
361 :2007/10/16(火) 14:16:27
>>364 小数は使っていません。今のところ拡縮などはしないで等倍のスプライトを表示して
実験しているだけなので。その段階で361のような状態なのでちょっと悩んでいたの
です。
>>365 自力での描画処理は行っていません。もし行うとすればたしかに365さんのおっしゃ
るようにディストネーション側のピクセルからソースの色を引っ張ってこないと拡大
したときに隙間とかができてみられたものじゃなくなりますね。そもそも自前描画で
速度は足りるものでしょうか。以前30Kアプリでプログラムサイズが全く足りなくて、
一部ルーチンをスクリプト化してスクラッチパッドに逃がしたことがあったのですが、
以外と速度は大丈夫でした。しかし描画処理となるとそれとは比較にならないほど
演算量が増えるのでやるとするとまた実験が必要ですね。
>>366 情報ありがとうございます。そうなるとちょっと辛いですね。機種情報調べてみます。
マスコットカプセル4にしちゃえよ
369 :
330 :2007/10/17(水) 11:54:56
>>359 , 360
助言ありがとうございます。。
AppTrace=on にして、RollData#getRollData()をtry〜catchで囲み、、、
そして、これが重要な問題だったと思うのですが、
RollReader rollreader = RollReader.getRollReader(0);
のカメラIDを(0)から(1)に変更したら、実機で動きました!
インカメのIDは1なんですね。
皆様色々とアドバイス本当にありがとうございました。
助かりました。
カメラIDは機種依存だよ
確か1の場合が多かった気はするが、機種依存だな。 ウチはとりあえず数回まわして初期化して取れた奴使うってやってた。
372 :
デフォルトの名無しさん :2007/10/17(水) 18:56:21
Dojaの標準クラスのファイル操作って結構メモリ周りを乱雑に扱ってないか? 使えるメモリ少ないのにメモリ上に全部展開とかって出来ないファイルとかどうすればいいんだかねえ これ標準クラスのソースなんて公表されてないんだよな?
鉄拳ってjavaで作られているんですか?
374 :
361 :2007/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年に一回くらいしか作る機会がなく、作る度に何かしら苦労してます。
それが楽しかったりするのさー
トライアングル2枚で右下だけuv調整、とかいう話をしてるの?
ニューロのジョイスティックモードに対応したいと考えています。 PointingDeviceクラスの説明には >端末によってサポートされていない場合があります。 >未サポートの場合、メソッドが呼び出された時点で >UnsupportedOperationException が発生します。 とあるのですが、isAvailable()で使用可否を取得するだけでも発生するのでしょうか? 未対応端末なら通常通り十字キーで使用できるように判定したいのですが・・・
>>377 例外出ようが何だろうがキャッチすりゃ良いだけでない?
使いたい機能が使えなかったら非対応にするしか無いから 特に考える必要は無いな。
>>377 DoJa-3.0な機種とかだと全ヶ所をtryで括っていても
PointingDeviceのジョイスティックモード(DoJa-3.5以降なので)用のメソッドを含んだclassがあるだけで
Unable to load classを吐いて強制終了する端末がある(クラスローダーが例外を発するのでtryで止められない)
100Kアプリなら問題ないけど30Kアプリだと問題になる
(30Kアプリでニューロジョイスティックモード対応機種はN700i,N701i)
もし古い機種にも対応した上でニューロも対応したいなら
jarを2個提供する方が安全だと思う
DoJa-3.5以降でも同様の実装の機種があるかどうかの確認はしてないんで知らない
後メソッドが呼び出されたら例外と書いてあるんだからDoJaの仕様にちゃんと則ってれば
isAvailable()を呼んだだけで例外が起きるPointingDevice関連は全部tryで括るべき
isAvailable()は、厳密には、デバイス搭載機の端末の設定が許可になっているかを調べるためのメソッドらしいから(例のPDF参照)、 try-catchした方がいいと思われ
サウンドの再生が終わったのに mediaActionが全く呼び出されないんですが 原因は何が考えられるでしょうか…?
processEventで無限ループ
setMediaListenerしてない
サウンドのケツに大量の無音部分が入ってる
mediaActionが呼び出されたことを確認するためのコード自体が間違っていて 実際は呼び出されているのに、それがわからない状態。
エミュでは実行できたけど 実機で実行したら「ソフトに継続動作出来ない障害が発生しました。」 って出るんだけど原因は何でしょうか。
>>387 1、メモリが足りない
2、その機種では使用できないオプショナルなor上位DoJaのAPIを使ってしまった
3、synchronizedが必要な個所でsynchronized抜け
4、他
389 :
387 :2007/10/27(土) 15:30:58
インポートしてるのが import com.nttdocomo.ui.*; import java.util.*; import javax.microedition.io.*; import java.io.*; これしかないんだけどオプショナルなAPIがこの中に含まれてたりしますか?
オプショナルなAPIはリファレンス読めばどんなのがあるかわかる つーか細かく聞きたいならソース公開しろ はっきり言ってこんな質問してる段階でプログラムの出来とかには誰一人期待もしてないから どんな下らんソースアップしても笑うやつは居ないよ それ以上は自力でどうにかしろ
おk、笑う準備完了。
392 :
387 :2007/10/27(土) 16:23:55
よし、俺がエスパーしてやる。 実機だと Display#setCurrentした瞬間にpaintが呼ばれる。 なのでIApplication#start()後に画像読み込み、paintで描画処理としていると、 先にpaintが呼ばれるため落ちる。
394 :
393 :2007/10/27(土) 16:33:30
む、外したw しかし随分パワーアップしたな…
おk 読むの断念。 仕事に戻る。
取り敢えずざっと流し読みした 危なっかしいコーディングがいくつか見受けられるがあまりそれが問題だとは考えたくは無いかな start()でメインルーブを作ってるの以外機種依存な部分は見受けられない メモリが足りてないんじゃないか(ヒープコンパクション関連も含め)とは思うが しかし巨大な配列を作ってるわけでもないしデータはリソース読みみたいだからサイズ的にも多寡が知れてるので ちょっと原因が不明だな実機でのappTraceの結果はなんとなってる? あと実機の機種名がなんなのかもだな>N900i,N901i,P900i,P901iはヒープコンパクション問題があるが どこまで実行が進んでるのかを見るためにappTrace=onにして System.out.println("0"); toriMain ten=new toriMain(); System.out.println("1"); Display.setCurrent(ten); System.out.println("2"); ten.exe(); みたいにしてみて根本的に実機で起動そのものが出来てるのかの確認をしてみ
俺もざっとしか読んでないけど画像122枚一気読みが原因では…
398 :
387 :2007/10/27(土) 19:23:10
jargで圧縮したのが原因みたいでした。 10KB分容量大きくなっちゃうけど諦めようorz みんな色々調べてくれてありでした。
jargは-nobcoを入れたほうがいいぞ 今ならProGuardをかけてからjarg -nobcoでjargにpreverifyもやらせればかなり縮む その後7Zipで潰せば良い あと気になったところ 一応安全のためにCanvas.eventはsetとgetをメソッドで保護してメソッドは1つのオブジェクトでsynchronizedにしておくべき それ以前にIApplication.start()そのものでメインループを作る場合はprocessEvent()が呼び出されることは保証されてない(機種依存となる) Calendar.getInstance()を何度も実行してるが1つ目と2つ目の間で日や月を跨ぐ可能性を考慮してないので Calendar.getInstance()は1度にしてそれを1つ目と2つ目で使いまわすべき 定期的にSystem.gc()を呼んだ方が良い
400 :
387 :2007/10/27(土) 21:51:14
>>399 アドバイス色々ありです。
class myEvent
{
int event;
synchronized void setEvent(int ev){event=ev;}
synchronized int getEvent()
{
int n=event;
event=-1;
return n;
}
}
setEventはprocessEvent()から呼び出して
getEventはループ内から呼び出すってことでいいのかな?
yes 別にクラスを分けなくてもメソッドそのものはCanvas(toriMain)に統合してても問題は無いけどね (Canvasという一つのオブジェクトで保護すればいいってことだから) まぁint 1つなら保護する必要性の有無は疑問ではあるがしないよりはしておく方が安全 結局の所start()というスレッドと携帯端末が作成したprocessEvent()を呼び出してるスレッドが並列動作時の問題だから
>それ以前にIApplication.start()そのものでメインループを作る場合はprocessEvent()が呼び出されることは保証されてない(機種依存となる) ちょっとまった、うちのゲームは全てstartで無限ループしているが、1回たりとも機種依存でダメだったことはないぞ 機種依存って資料かなにかに書いてあった?
>>402 じゃあ聞くがIApplication.start()とCanvas.processEvent()が別スレッドで呼ばれることが保証されてると書かれた資料を示せ
少なくともjguidefordoja5_x_070423.pdfの86ページにはCanvas.processEvent()がどのようにスレッド割り当てされるかは機種依存とある
404 :
デフォルトの名無しさん :2007/10/28(日) 07:50:22
DoCoMoの各機種の文字サイズ(大フォントが○×○、中フォントが○×○、小サイズが○×○)とか をまとめてるサイトって誰かご存知ないですか?
んぱか をゲイツに聞いてみろ。
>>403 仕様として機種依存にできることは書いてるけど、
402実際に制限のあった実装してる端末が今のとこなかった、ということでしょ
保証を出せとか言い出して少し落ち着けよ
>>403 確かにスレッド割り当て〜はあるから「シングルスレッドで実装されてたらダメ」だね
資料Thx
一応商業的に作ってても、今のところ「startで無限ループしたらやばかった」って機種は無かったよ
将来的な保証を考えて、普通にスレッドでやったほうがいいかもね
>>406 それは今の所の実装がそうであるってだけじゃん。
もし動かない端末が現れた場合、客にどう言い訳する?
仕様は守っとこうぜ。
契約の内容次第だが、新機種対応は別料金です。 でおk。 言い訳の必要が見当たらん。
仕様も大切だが、趣味でやってる立場からすると
現実の実装についての
>>402 の情報はスゲーありがたい。
>>407 一応既に
>>282 って発言もあるみたいだけど?
趣味な人間としちゃ自分の周りで持ってる人と自分が持ってる機種でしか直接確認できないから
その辺どうなのかは確かに気になるな
>>408 仕様外でも動く数がここまできたらもうDoJaの仕様の方を変更する規模だよ
知らずに作ってる人だって多いだろ。俺も知らんかったし
影響を無視して仕様を強行するより、現実の動作に互換を合わせて
マイナーアップで仕様を変更する方が現実的。まあ1プログラマの予想だけどね
で、仕様通りに作れてなかったソフトが、1発目に動かなければ非対応になるか、
409の通り別料金か修正すればいいだけ。
理由が仕様に載ってようがいまいが、存在しない機種のための動作保証なんてしないのが普通。
言い訳をする必要はなく謝って修正すればいい話。
413 :
デフォルトの名無しさん :2007/10/28(日) 18:12:17
i-appliでまだ商売できるのなら、この国も終わりだね。 昔からPCは技術者を育成した、しかし、携帯は中国・インド・イスラエルに仕事を 与えるだけだ。
>>413 行間が空き過ぎてて読み取れません(´・ω・`)
>>412 >仕様外でも動く数がここまできたらもうDoJaの仕様の方を変更する規模だよ
>知らずに作ってる人だって多いだろ。俺も知らんかったし
単にドキュメント読んでないだけだろう。
動作保障外の組み方しておいて、今までたまたま動いてたからって
それを仕様としろなんて普通ありえない。
>理由が仕様に載ってようがいまいが、存在しない機種のための動作保証なんてしないのが普通。
とりあえず仕事として、将来的にも機種対応をしていくつもりで組んでいるのであれば、
ある程度は動作を見込んで実装するのが普通。
>>415 熱意に溢れてるなw
ウチの会社で中国人と一緒にアプリ作らないか?w
携帯アプリに関わった人どんどん辞めて奴隷不足なんだ。
>>415 ちょっと聞くけどさDoJa1.0の頃からドキュメントに記載されてたの?もしそうなら
> 単にドキュメント読んでないだけだろう
って言う貴方の意見が絶対的に正しいんだけどさ
>>417 jguide010514.pdf(DoJa1.0のドキュメント2001/06/22発行)の65〜66ページにもちゃんと書いてある
誰でも確認できることなんだから自分で確認してから書いたほうがいい
え? こんな事わざわざ確認するのがめんどくさいから聞いたんだけど
>>412 仕様を縮小解釈するのなら、実装を拠り所にしてもいいけど、
仕様を拡大解釈するのはマズいんじゃないかな。
421 :
デフォルトの名無しさん :2007/10/28(日) 20:35:51
流れぶった切ってすみません、 生まれて初めてのjavaというかプログラミングに挑戦したいと思って いるのですが、開発環境すら整備できていません、 ネットで読み漁ったところ java2SDK,Standard Edition j2sdk-1_3_1_11-windows-i586.exe をゲットする所から始めないといけないようですが、 SUNのサイトにいくとSolarisむけの開発環境しか手に入らないぽいです。 (プロ向けに有償サポートなら手に入りそうな文面ですがそこまでは、、) 皆さんはどういった開発環境で行われていますか? 今でも環境を整えられる方法があれば知りたいです。 長文すみません。
424 :
デフォルトの名無しさん :2007/10/28(日) 21:10:32
みんなから3年くらい遅れてると思うけど がんばれ
大丈夫。あと五年内のうちには携帯でWindowsプログラミングできるようになってるはず HSPとか簡単なスクリプト言語でサクサクっと手軽に出来るようになるから今無駄に努力する必要はないよ
(;^ω^)
あと5年かどうかは別として アセンブラはもう使わなくて良い時代になってきたな。
お前は改造マリオを馬鹿にしたっ(゜Д゜#)
改造マリオ? 何だそりゃ? ちょっと任天堂にメールで聞いてみる。
本当に送るなら任天堂の反応晒して
改造マリオってデータだけ変更してプログラムは同じなんじゃないか
なんというニコ動ネタ
>>411 いや、普通にF505もF506も動いたよ
F900も問題無し
F系はそれ以前にくだらねえ問題がちらほらあるから好きじゃないな!w
435 :
282 :2007/10/30(火) 10:30:29
いまさらながら、whileループで間違えた部分があるので修正。 startで無限ループじゃなくて、IApplicationを継承したクラスの コンストラクタで無限ループしたらアウトだったわ。 startでは試したことなかった。ってか俺startの中身は空だわ^^
>>434 290にも同じ事書いたばかりだけど、
ウチでもstart無限ループで問題になってる機種は無い。
先ほど調べたらFOMA全機種対応の
MediaListener使ってるアプリも評価パスしてるわ。
思うに、保証されてはいないものの、どの機種も問題ないのではないかと。
だからと言って推奨はしないけど。
437 :
デフォルトの名無しさん :2007/10/30(火) 11:27:45
>>435 流石にそれは間違えすぎだろw
流石にコンストラクタで無限ループなんてするなよ!
コンストラクタで全て初期化してから、start()に処理が回ってくる仕様なんだからさ
>>435 君の指摘により何人が検査やり直したと思ってるんだ?w
はい俺も完璧に釣られますた(=´∇`=)
自作テンプレを絶対的に信じてるから 検査やり直しとかする気も無い(`・ω・´) かれこれ4年間改良を続けて来たものだしな。
MIDPというかauとかに移植するときってどうしてる?プリプロセッサ使う?それとも互換クラス作ってる?
>>439 俺のN88BASICから始まる合計15年分の経験則は
その思い込みこそがプログラムにおけるもっとも危険な思考だと警告してる
まあ結局のところ、
>>439 と
>>441 のどっちもが正しい、というのが現実だがな
一時の思い込みで過去完璧に動いてきたプログラムをいじるのは、予想してるよりはるかにリスクが高い。
といいつつ、絶対に間違いのないプログラムなど決してない。
>>442 リスクが高いと理解するのと自分が作ったものを盲信するのは次元が違うと思うがな
でも4年間問題なく動いてきたシステムに自信を持つのは悪いことじゃないと思うがね
>>444 自信を持つのは別に悪くは無いがそれを盲信するのは問題だろう
まず最初に疑うべきは自分自身とそのソースコードだ
それを理解した上で自分の知識と知恵と経験を総動員することこそがプログラムの醍醐味ではないのかね?
「盲信」っていうのは、過去と今の状況の違いを忘れて コードの実績を信じる、という感じかな? ぜーんっぜん関係なさそうな箇所の違いが、いままでの 実績の前提条件を崩してたのに気づく、とかいうことはあるな。 こういう熟成されたコードに修正を入れなきゃいけない問題が 出たら「あー、カビ生えちゃった」とか言わない? 言わないか・・・。
私的には、世界で最も信用ならないのは、自分が書いたコードだと思う。
至言だ。
449 :
デフォルトの名無しさん :2007/10/31(水) 03:28:51
N900iの端末で動くアプリを作るため、 最近環境整えた。 J2SE SDK 1.4.2 Eclipse 3.2.1 Doja 4.0 古い J2SE と古い Eclipse を探すのに苦労した。 どうせインストールするなら最新版をインストールしたかったな(´・ω・`)
全部最新版でも問題なく作れるはずだがなんか不具合あったっけ?
N900iはDoja3.5という突っ込みはあり?
452 :
デフォルトの名無しさん :2007/10/31(水) 13:12:40
やってみないと分らない
454 :
デフォルトの名無しさん :2007/10/31(水) 13:21:59
やってみる価値があるということがわかっただけで大収穫です どうせなら最新版インストールしたかったので・・・ とりあえずやってみます。結果報告は1週間後かもですがよろです。
100kアプリくらいまでならIDE無しの テキストエディタだけで作っちゃうからなぁ(´・ω・`)
Doja5.0SDKでも問題ないって意味だと思った
>>452 DoJa3.5のiαppliToolだと環境変数弄らんとJava6使うの面倒だったと思う。
5.0なら6使っても自動でコンパイルオプション付けてくれるから平気。
ついでにEclipse3.3でも5.0のプラグイン使える。
コンパイルは5.0ので平気だけど、3.5以降の拡張API使うとアウト。
気になるなら3.5もインストールして、
Eclipse側のライブラリのパスを書き換えとけばおk。
ちなみにEclipseでコンパイルするとアプリサイズが大きくなるんで、
最終的にiαppliToolで吐き出す前提で書いる。
Eclipseのみでよければ上記の制約は幾つか無くなる。
>>457 DoJa5.0SDKのエミュレーター環境設定のビルドの設定でターゲットプロファイルをDoJa3.5にしておけば
4.0とかのAPIを使えばコンパイル時にエラー出してくれるよ
ただエミュレーターそのもので動かす際には5.0までのAPIが使えちゃうのと
微妙にだが5.0SDKでターゲットプロファイルを弄って吐かせたコードと
3.5SDKで吐かせたコードが異なる場合があるみたいなんで
完全に安全を期するなら3.5SDKも入れておいて普段は5.0SDKとそのプラグインで作って完成してから
3.5SDKでコンパイルして動作確認撮ればいいはず
240x240の画面を縦4横3の12個に分けて0〜9、*、#に対応した箇所に画像を表示するアプリを作っています。 getKeypadState()メソッドを使って複数キーの同時押しにも対応させたつもりです。 エミュレーター上では、全ての同時押しを取得しそれぞれ表示できそうなのですが(ビープ音が鳴る個数以上は検証出来ない) 実機(N904i)では2個までしか取得できないでいます。(3個目は2個のうちどちらかが離されないと表示されない) 3個以上の同時押しキー取得はiアプリの仕様で無理なんでしょうか?
460 :
457 :2007/10/31(水) 19:00:54
あー、ゴメン。1点勘違い。 Eclipse3.3でDoJaプラグイン試してないわ。 プラグインはEclipse3.0/3.1用とあるけど、3.2では動いた・・・の間違い。
2個まで同時押し保証、3個目以降機種依存じゃなかったっけ。 同時押し前提のアプリは作らん方が良いよ。
同時押しそのものが機種依存じゃなかったか? でなけりゃD504i,D505i,D505iSとか仕様に則ってないことになるぞ つーか同時押しそのものに関しての記述がdocomoの資料にはない
Dで同じ列2つはダメとかそんな感じのあったな。
>>402 私もstartでループしまくってるよ。スレッドを使うのは通信処理だけ。
ゲーム作ってるんだけど、音も出してるしprocessEventも使ってるけど問題ないよ。
全機種チェックして問題でなかったしユーザからもクレームは来てない。
ただ、これが正攻法ではないとは思うけどね。10Kアプリからの名残というか。
docomoもそこら辺わかってるから、このまま動かしてくれるんでないかな。
MIDPは2つスレッド作ってるけど。
数週間分まとめて読んだけど、上の件、結論出てたのか・・
しかしP900とN900の不具合はひどい。どれだけ悩んだか(1日だけど)・・対象外にしたいくらい。
あと、MLD。さっさと統一してほしいもんだ。
MLDは、905からNがヒュートレックになって、Yamaha ADPCMはさようなららしいよ。
携帯のチープなスプーカーには YAMAHA音源のほうが合ってるのにね
>>467 マジですか。
ちょっと悲しいけど、しょうがないな。
470 :
452 :2007/11/02(金) 23:08:37
勉強になります。 だいぶ勘違いしていました。 DoJa 3.5 のアプリを作るには、DoJa 3.5をインストールしておいて、 開発環境は Java6 + Eclipse 3.3.3 + DoJa 5.0 で 拡張APIに注意しながらコードを書いて (Eclipse側でライブラリのパスをDoJa 3.5のものに書き換えればOK?)、 その後、DoJa 3.5 SDKでコンパイルして動作確認する、と・・・ ところで、以前、DoJa 3.5のアプリを作ろうと思って J2SE 1.4.2 をインストールしたのですが、 Java 6 をインストールしたら、この J2SE 1.4.2 は削除してしまっても問題ないのでしょうか?
ADF ProfileVar -> DoJa3.5
正直、一つのファイルで全端末鳴らせるようになればどれでもいい
悲しいこと言うなぁ
端末間での違いって、機械的にデータ修正できるようなものなの? MLDファイルをアプリ上で動的に再生成して、上手いことやれないのかな。
>>474 音付きのエミュレータアプリがあるくらいだから出来ると思うけど激しく重そう
ところで音声のMLDが一つに統一できなかった理由ってNがヤマハのチップにこだわってたからって解釈でいいの?
むしろ他メーカーがヤマハを採用するのをしぶったともいえる 国内他キャリア考えると、これはこれでめんどい話だ
Eclipseで開発していて、Doja5.0でデバッグする際に端末を設定する方法はありますか? ADFのDrawAreaが240x320のアプリをデバックする際にDoja5.0の端末のデフォルトが240x240らしく、 「DrawArea の値が不正です」というエラーが返ってきます。
479 :
478 :2007/11/04(日) 00:20:33
すみません、解決しました。 見当違いなところをずっと探してました・・・
自機(携帯)のメアドはどうすれば取得できますか
N905iもYAMAHAのサウンドチップ搭載だが。 ADPCMは再生可能。
ROHMは駆逐されたの?
MLDはやっと統一されるかと思ったけど、LとNMが・・。 MLDが統一されていないのはdocomoが主導してハードの上に1枚被せるようにしなかったのが悪い。 foma切り替え時にでもやれただろに。
でもそれをすると被せなくても済むメーカーとそうでないメーカーとで 価格差や設計の難易度に響くからできないんでしょ。 mdlの差分がどーのこーので困るって一部の開発者の都合だし。 その視点でものを言えば そもそもDoJaとMIDPとBREWが存在すること自体ウザイ訳でw
結局 Java の Write Once, Run Anywhere なんて幻想さ。
幻想なのはJ2MEが出てくる以前からすでに知られていて信じていたのは一部のJava狂信者だけ
>>485 DojaとMIDPはなんとかなってもBREWはどうしようもないもんなぁ・・・
iアプリの作成で行き詰っています。 Canvas1(タイトル画面)→Panel(入力画面)→Canvas2(メイン画面)という構成のiアプリを作成しています。 PanelとCanvas2をsetCurrent()メソッドを使用して、相互に画面を切り替えられるようにしたのですが、 Canvas2でキー操作を行ったあとで、Panelに画面を切り替えると、 Canvas2で行ったキー操作が、なぜかPanelでも反映されてしまいます。 どなたかこの問題を解決する方法を教えていただけないでしょうか。 よろしくお願いします。
release yo?
>>489 キーイベント受けてから少し待ってsetCurrent
>>491 見当違いなことを聞いていたらすみません。
少し待つというのは、たとえば、Thlead.sleep(1000)
とすればいいのでしょうか?
待ってみてもやはりキー操作が反映されてしまいます。
みんなDojaかMIDPにして、アプリ用のメモリサイズや画面サイズタイマー精度などを全て統一すれば良いのに。
そういうことするとたいてい進化が止まるね
>>493 すみません!
Thread.sleep()ですね。
でもできませんでしたorz
canvas1で押した瞬間に処理するんじゃなく放した瞬間に処理するようにすればいい
そういえば数年前スタープロジェクトとかいうDocomoとsunで 組んで新しい携帯用のプロファイル作るって話はどうなった?
スタープロジェクトwあったなぁ つーかそんな内容だったっけ、もう忘れちゃったよ
全く話題にもならんし立ち消えじゃないの? というかsun側が正式にDoJaをプロファイルの一つに入れるとかじゃない限り 今更DoJaの既存クラス大幅変更なんてできないだろ 旧メソッドを残して上位互換としてクラスを変更してくってのもまたデバグとかの面でかなり面倒だし
>>496 processEvent内でThread.sleepは無効と思っとけ。
前スレの後の方にprocessEvent使わないサンプルあるから使ってみれ。
>>497 キーアップでもパネルにキーイベントが残る端末があったような。
502 :
デフォルトの名無しさん :2007/11/06(火) 14:33:13
Doja 3.5 のアプリ開発の開発環境に悪戦苦闘している俺です。 Java EE 6 (java_ee_sdk-5_03-preview2-windows.exe)でも Doja 3.5 アプリの開発できますか? Windows XP sp2 です。 ここさえ乗り越えれば、アプリ作り放題の日々が待っているんです。
503 :
デフォルトの名無しさん :2007/11/06(火) 14:43:36
って、
>>457 の方がまさに俺宛に回答してくれてたorz
前回、457を読んだ時はレベルが高すぎて・・・もう少し環境整えたら
もう一度再読しようと思ってたんだっけ・・・。
Java 6 で i アプリを開発する場合は、DoJa 5.0 を入れて DoJa 5.0 のコンパイルオプションを利用する、
でしたね。
Java EE は、 Java SE も含んでいるから・・・問題ない、と。
すみません、解決しましたm(._.)m
端からみると、同じような質問を繰り返してるようにしか見えませんねorz
改行がうっとうしい
つくるのめんどくさい
テクスチャのUV指定について質問があります。 現在Doja5.0でマスコットカプセルを使って COMMAND_RENDER_QUADS(四角形ポリゴン)をコマンドリストで描画させているのですが、 テクスチャBMPの(0.0)の座標に置いてある「16ドット四方のグラフィック」を単純に画面左上に等倍の大きさで貼り付けたい場合、 4つの頂点座標は平行投影で ( 0, 0) (16, 0) (16,16) ( 0,16)で、 その場合UVをおなじく (0,0) (16,0) (16,16) ( 0,16) にすると、右側1ラインと下側1ラインが1ドットずれてテクスチャマッピングされてしまいます。 この場合UV指定は16ではなく15にしないといけなかったりしますか?
507 :
506 :2007/11/06(火) 23:15:39
(続き) テクスチャ座標 ( 0, 0) (16, 0) (16,16) ( 0,16) UV座標 ( 0, 0) (16, 0) (16,16) ( 0,16) だと、 スクリーン上の16ドット四方の領域に 15ドット四方のテクスチャがマッピングされている、といった感じになってしまいます。 とすると テクスチャ座標 ( 0, 0) (16, 0) (16,16) ( 0,16) UV座標 ( 0, 0) (17, 0) (17,17) ( 0,17) にすればいいのでしょうか・・う〜ん
porigon sure iki nasai
>506 >361と同じ話か?
510 :
デフォルトの名無しさん :2007/11/07(水) 11:47:11
511 :
デフォルトの名無しさん :2007/11/07(水) 14:17:53
905とか705のDojaのバージョンって、 いくつなんですかね? もう公式発表されてましたっけ?
まだドコモ公式には置いてないね。 705iは知らんが、905iは5.1かね。 5.1の開発ガイドとエミュはすでに一般公開されてる。
通信にプログレスバーを付けたいのですが、現在「どれくらい通信が済んでいるか」を取得することってできますかね?
>>513 え・・・ストリームからデータを読み込むときに戻り値で把握できるはずなんだが
なんで「どれくらい通信が済んでいるか」を取得したいと考えたのかそれが不思議
え? ストリームから読み始められる時。つまり HttpConnectionのconnect()が制御を返した時って、既に通信は全て終わっていませんか? ストリームからどれくらい読み出せているかを表示したいのではなく(それは一瞬だと思いますので)、通信があとどの程度で終了するのかを表示したいのです
>>515 一瞬で終わるのなら終わりでいいだろうに・・・
というかそもそも1回の通信で150kbしか受信できないのは知ってる?
今まさにデータを受信してる最中ですって時に 何バイト受信したかをリアルタイムで知りたいってんだろ? 答え:不可能。 以上。
>517補足。 受信バッファを仮に1024byte分用意して、byte[] buf = new byte[1024]; それで細切れに読み込んで、今何回目の読み込みかで計測するくらいはできる。 でもそれで描画処理まで挟むのは面倒臭いと思う。 1ファイル完了ごとに(=1回の通信をクローズするごとに)バーを進めるくらいならまぁ。
どうせ一回に150kbしか受信できないんだから素直に受信が終わるごとにバーを進めたらいいのに
>>517 不可能ですか。ありがとうございました
>>519 ストリームからの読み込みは超速いので描画処理挟むのは微妙ですよね。
1ファイルを小さくすれば細かくバーを進められますね。
接続準備時間がもったいないから絶対やりませんけどw
150KBをDLしきるのはそこそこ時間かかるので、その間バーを(正しく)進めたかったんですけどね…
勝手にちょっとずつ伸びてく偽バーで「進んでるように見せる」のはアホらしいですよね…
>>521 いや、アホらしいんじゃなくてそれが普通。
ダウンロード中のバイトサイズまできっちり制御できんのはBREWくらい。
BREWごときができんのにさ・・・
ファイルが複数あるなら、ダウンロードするデータ量と、ダウンロードが完了したデータ量で割り算すれば 計算できないこともないけど、よくある例としては ・進んでるように見せるバー(IEとか某フルブラウザとか) ・アニメーションするバー(Windows起動時とかiTunesとか) ・アニメーションする画像(古いIEの地球儀アイコンとか)
BREWが出来るのかどうか調べないとわからないけど
UNIXとかWindowsとかでも
>>519 見たいに細切れに読みながらバーを進めるのが普通のやり方のはずだが・・・
通信を別スレッドでまわして、描画処理してるスレッドで [受信サイズ/contentlength]を表示すればよいだけじゃないの? ファイルが複数ならそれも考慮すればいいだけだし。 おれはそうやってるが。
read()に入る前に、ダウンロードは終了していまっているとかいう話 526は、Java側で処理した量の話
>>521 10Kくらいずつならファイル分割してもいいんじゃないか
readから戻ってきた時点で通信が終わっているとは限らない 仮に終わってるような短時間の通信であればそんなのを考慮する意味がない
>>511 最低でも5.0LEかな
L705i,L705iXが500Kアプリ
NM705iが30+200Kアプリであることと
それ以外がメガアプリ対応であることが判明してる
上補足 L705i,L705iX,NM705i以外は最低でも5.0LE
その情報ってプレスリリースとかどっかニュースサイトで出てる? ソース出せよって煽りじゃなくて 関係者情報リークだったら無茶すんなって意味でw
ちなみにL704iはDoJa-3.5LEだが500Kアプリと記載されてるので 実際の500K(500K以内であればJARとスクラッチパッドのサイズ比は自由)アプリか100+400Kアプリかどうかは判別できない
ちょっと前に、start()での無限ループ+processEvent()は実装依存と言 う話がありましたが、仕様を満たすには、start()のメインループ部分を 別スレッドにしちゃうとかで解決できるんでしょうか? この場合、IApplicationにRunnableを実装して、run()にメインループを押 し込んじゃえばいいんでしょうか? Canvasを使うの初めてなんで、どうせ創るなら仕様を満足した方がいい かと思って。
>>498 個人的考えだけど、携帯Javaは今後携帯電話向けFLASH+AS3かFLASH+AIRの
つなぎとして生きて消えていくしかないよ
ドコモも「共通仕様? 利益にならんでしょ」と言っちゃう会社だしな
サンは知らんが、当のドコモはもうやる気ないだろうし、アプリ関係はアドビに任せたいだろ
BREWの進化の早さっぷり見てれば、数社で独自仕様をさっさと進化させて
金に換えれる方がいいじゃないか。MIDPの停滞ぷりをみよ
doja5.0で一部のアプリ実行時にwindowsがエラーを吐いて実行できないようになった resフォルダにでかい画像ファイルなんかを入れて再コンパイル ソースを適当に組み替えて再コンパイル のどちらかの方法で一応実行できる様にはなる どうやら最近あったwindowsアップデートの影響らしいんだけど 皆はどうですか?
∩___∩ |
| ノ\ ヽ |
/ ●゛ ● | |
| ∪ ( _●_) ミ j
彡、 |∪| | J
/ ∩ノ ⊃ ヽ
>>536 ( \ / _ノ | |
.\ “ /__| |
\ /___ /
どう見ても釣りだな でなければかなり偏ってる いずれにしろ参考にならない
540 :
デフォルトの名無しさん :2007/11/08(木) 10:05:09
なあ、ゲームとかの画像とか音楽データとか挿入動画みたいのをSDに入れてそれを再生するってできんの? Bindingにしかアクセスできないんだけど調査不足?それとも気のせい? 全部をダウンロードさせるのって結構面倒なんだけど
エスパーきぼんぬっすか
>>501 前スレをみて少しやり方を変えたら問題が解決しました。
ありがとうございました。
543 :
デフォルトの名無しさん :2007/11/08(木) 14:08:53
DoCoMoから落とせる5.Xコンテンツ開発ガイドに、 905はdoja5.1って書いてあるな。 これが公式発表みたいなもんかね。
N904i について聞きたいのですが、この機種、私が試した範囲ではSystem.gc()してもメモリーを一切解放してくれません しかもそのまま使いつづけていくと劇的に処理速度が低下していき、FPS60なんて保ってられず・・・ みなさんどのように対策してますか? 同じアプリでもN903iやF903iは問題なく開放されました ・開放されてない System.getRuntime().getFreeMemory() で空きを調査して、空きが増えることは一切なく減る一方 String str = "ほげ"; str = null; System.gc(); をループさせるだけでも、どんどん"ほげ"がメモリーリーク(と呼んでもいいかも)していきメモリーがガンガン減っていく ・ループ IApplicationのstart()内で無限ループしている状態
545 :
fr :2007/11/08(木) 19:20:26
>>544 そもそも、文字列リテラルの代入だけではピープは消費しない
携帯でなくても、Java SEで試せばわかる
それなのにピープの空き容量が変わるということは、どこか別のところに問題がある
やるならこう
String str = new String("ほげ");
>>546 ごめん、思い出しながらコード書いたもので間違えた
とりあえず、newしたものをnullいれて、System.gc()しても空きメモリーが回復しないのは確かでした
他携帯なら問題なかった(903だけではなく、いろんな901や902でも試した)ので、コードに問題があるとはあまり思えないところです
すまんがピープワロタ
>544 System.gc()のあとにThread.sleep()入れても意味ないかな。わからんが。 どうにもならなかったら 高速性を要求されるところでは、なるべくメモリを動的に確保しないようにする で対策なのかな。(対策って言うんかこれ)
>>550 問題は、高速性を要求されなくなったから「さあ溜まってたゴミを捨てようか」と思っても捨てられないこと
N904に正式に対応する場合、起動時に全て静的にとるなんていう馬鹿コードになる可能性が・・・
>>551 FPS60がどのくらいまで落ち込むの?止まるの?
数分で、FPS20くらいまではとりあえず落ちましたね はっきりいってボロボロです 耐久テストしてるので明日また報告します
スタックが一つポップされるまで回収対象にならないとか
fpsを数字の前に持ってくるな。気持ち悪い。
>>544 その機種が壊れてるんだよ
初期出荷の携帯はシステムにバグが多い
アップデートする必要があるかもしれないからDSに聞いてみるといい
>>556 その可能性もありますね
OSアップデートで修正される(初期出荷時には間に合わなかった?)かもと
正直こんな仕様じゃ、既存リリースのアプリが何一つまともに動きませんからね
・Thread.sleepを入れてみる
・IApplication#start()の中で無限ループするのをやめてみる
・OSをアップデートしてみる
明日これらを試してみますが、他にもアイデアがあればよろしくお願いします
原因わかりました メモリー量を画面に表示していたのですが、その際 g = img.getGraphics(); g.drawString(略); g.dispose(); を行なっており、原因はこれです N904iはgetGraphicsしたGraphicsを、きちんとdisposeしてもリークさせるようです 解決策としては一度作ったGraphicsは生成しなおさないということになりますが、複数持ちたい場合困りますね・・・
N904i使いだけどこの機種フリーズ、再起動、電源落ちは当たり前 絶対バグありまくりだよ
交換しろよ そんな症状は出ない
>>559 imgも一緒に開放(dispose)してもリークする?
iチャネルに関すると思われるエラーが最近多い 長く使うと携帯は壊れるものなのかもしれない
bitrotかも。
565 :
クリフト :2007/11/12(月) 14:08:21
Doja4.1でD800iDS用のタッチパネル式アプリを作成しています。 タッチアクションの処理をボタンの長押しにするには下のソースコードをどう変形すればよいでしょうか? // タッチアクションの処理 public final void touchControlAction (TouchControl source, int type, int x, int y) { // Rightボタンの押下 if (source == rightButton && type == TouchControlListener.CLICKED) { i++;
>>565 使ったこと無いけどメインループ作れって事で。
if( source == rightButton ) {
bRight = type == TouchControlListener.CLICKED;
}
メインループ
if( bRight ) {
i++;
}
567 :
クリフト :2007/11/12(月) 18:42:51
>>566 ありがとうございます。
うまくいきませんね。もうチョイがんばってみます。
>>567 うまくいかないって touchControlAction の中に
ループ作ってるってオチじゃないよな?
569 :
デフォルトの名無しさん :2007/11/12(月) 19:57:52
570 :
デフォルトの名無しさん :2007/11/13(火) 01:22:29
携帯Javaアプリやってるわけではないのですが、皆さんに質問。 携帯Javaの利点ってなんでしょう?私も組み込みプログラマ の端くれでCでitronやLinuxで開発しています。で、結構 速度の要求だけは顧客から来るので、省メモリコピーなどに 腐心していて、C++ですら使いたくても使えないような状況なんです。 組み込みJavaの利点って、汎用のフレームワークがあるから という、単なるプラットフォームの問題だけなのかな? だとしたら、ソフトバンクやGoogleなんかが提唱しようとしている、 OpenKODE(OpenGL/ES)ベースのプラットフォームが、無償で提供されて、 高速だったりすると、そっちのほうがよかったりするのかな。 素朴な疑問です。
誤爆ですよね スレ一覧よく見てください
>>570 int foo[5]; みたいな配列で foo[10]=8; とかやったらどうなるかって事
573 :
デフォルトの名無しさん :2007/11/13(火) 03:11:04
>>571 そんなにスレ違いとも、おもわないんだが。
Javaをよく知らなくて>1が分からなかったのなら仕方がない
>>570 Javaにどんだけ利点があろうがなかろうがウンコだろうがiMODEで商売しようと思ったら
Java使うしかないんです><
汎用フレームワークがあるっていうかそれしかないっていうか
本物の技術者なら、目の前のオモチャで遊ばないなんて。 面白いぞ、たとえ実用性は二の次でも。
>>570 そんな現状動かないものを考慮してもしょうがない
携帯アプリを作る選択肢が携帯JavaかFlashかJSしかない
ただそれだけ
速度か速かろうと遅かろうと、ユーザーにとっては面白ければなんでもいいわけで。
よくマジレスするなと感心させられますw
>>570 セキュリティを管理するOS が無かった昔の携帯電話で、
セキュリティの問題なくアプリを動かすには
(a) Java 等のサンドボックスで守る方式
(b) BREW等の検証済みの公式アプリしか使わせない方式
のどっちかが必要だったわけです。
いまでも実際には似たようなもんで、ネイティブコードのアプリを実行
できる式の携帯電話は大抵ハックされてるよね。
581 :
デフォルトの名無しさん :2007/11/13(火) 20:13:46
移植メンドクセーんだから余計なもん増やすなよ検閲エンジン
スレ違いはそろそろしんでください^^;
>>570 適当に作っても平気なのはかなりのメリットだな。
javaもC/C++に比べれば全然簡単だし、
学生が遊び感覚で作れるのはいいとおもう。
>>581 OpenGL/ESはドコモもすでに採用してるわけだが
JavaとOpenGL/ESを無料に関連付けて何がしたいんだろう?
アプリエミュでスリープ時間測定したらかなりずれたんだけど エミュのバグでしょうか。 sleep(10)=16 sleep(20)=31 sleep(30)=31 sleep(40)=47 sleep(50)=63 sleep(60)=62 sleep(70)=78 sleep(80)=94 sleep(90)=94 sleep(100)=109 ちなみに実機だと正しくスリープしてました。
そーゆーもんだとおもう。 制度そんなに高く無いお
588 :
デフォルトの名無しさん :2007/11/13(火) 22:09:22
>>585 げっ、アンドロイドのアプリケーションフレームワーク部って
結局、全部Javaなんか・・・。
>>587 そーゆーもんなのか
ここまで違うとゲームの難易度に差が出て調整がしずらいな
自分の携帯はソフトバンクだから実機動作は友達に頼むしかないorz
一応実機
sleep(10)=10
sleep(20)=22
sleep(30)=31
sleep(40)=42
sleep(50)=52
sleep(60)=61
sleep(70)=71
sleep(80)=82
sleep(90)=92
sleep(100)=102
ドコモの携帯買おうぜ。キャリアとしてのソフトバンクって利点が少ない。 実機テストを一機種でしかしてないのにリリースするのはあんまり良くないし。 正直、ソフトバンクが人気でMNPで人が流れて行ってるのが不思議なくらい あそこはまともじゃない企業なんだが・・・
>>586 Windowsのタイマーの精度が15.525msだから
>>589 sleepの精度は端末に依存だからちゃんと経過時間を計ってやらないとだめだよ
>>589 ちなみに、30kダウンロードすると約50円だから
友達無くさんようにな。
パケホーダイを勧めておけば
>>589 sleep時間が難易度に影響するような構造がそもそもおかしいんじゃ
キャラの移動速度を決める時や、格ゲーのコマンド入力監視みたいなのは sleep()じゃなくてSystem.currentTimeMillis()使った方がいいってのが 以前にスレで出た気がする。
すいません。質問です。 byte配列に置いた文字列を随時読み込んで画面表示したいです。 Stringのコンストラクタなら文字コードも指定できて良い塩梅と思っていたら 作っているうち、newを連発しているのが気持ち悪くなってきてしまいました。 最終的にStringBufferにappendできれば良いかと考えて、byte[]をchar[]に 変換しようとしたところで詰まってまs。 byte[]に文字列を置いた場合は、どういう方法で変換・表示するのが格好良い?
>597 newを連発する意味がわからないな。 Stringのコンストラクタで文字列にしたら後はそれを保持してればいいのでは。 byte[]の中身が変化するというなら、その都度newするのは当然。 「new連発が気持ち悪い」と気にする必要はないよ。 それでも何かこだわりがあるならJava一般スレ行って聞いてみて。
>>598 スクラッチパッドに有る圧縮した文章を、こまめに伸張しつつ
ブックリーダ的に表示できないかな、と思っていたので、数秒
に一度は新しくStringを読んでくることになりそうです。
スレのちょっと前を読んでいたら、503iを試した時にSystem.gc()
がうまく動かないのと四月問題が嫌になってiアプリから離れた
記憶が蘇ってしまい、ちょっと疑心暗鬼気味になってしまった
ようです。
今のDoJaは大丈夫だから、どんどんnewすりゃいいじゃん、と
言われれば、本当にその通りだと思います。質問しておいて
なんですが。
「byteをStringに変換」って言い回ししてるけど、もしかしてStringをオブジェクトだと思ってないとか? newがオブジェクトを確保することだと思ってないとか?
InputStreamReader を使うといいんじゃない?たぶん。
>Stringのコンストラクタなら文字コードも指定できて DoJaがサポートするのはSJISのみ
603 :
589 :2007/11/14(水) 17:09:35
>>592 こんな感じでいいのかな?
long sleep1=0,sleep2=0;
int hosei=0;
wihle(true)
{
処理
int myTime=50; //50msスリープする
str.Millis=System.currentTimeMillis();
sleep1+=myTime-str.Millis+hosei;
if(sleep1>0)Thread.sleep(sleep1);
if(str.Millis-sleep2>myTime)hosei--;
if(str.Millis-sleep2<myTime)hosei++;
sleep1=sleep2=str.Millis; //現在の時間を記録
}
597です InputStreamReaderとByteArrayInputStreamの組み合わせで解決したようです。 ありがとうございました。 配列をストリームとして読む発想が無かったようです。
>>589 いやsleep()に指定した時間分きちんとsleepすることが保障されてないわけだから
sleepがどうこうは関係なくて経過時間分の処理をする
time = 0
white(true) {
start = System.currentTimeMillis();
処理(移動などの処理はtime時間分の計算をする)
time = System.currentTimeMillis() - time;
}
こんな感じ
>>603 アニメ処理等でなるべくきっちり合わせたいときは、ちょっと少なめにSleepしてから
ビジーループで目的時刻を待つと良いよ。
607 :
605 :2007/11/14(水) 17:29:04
すまん…間違ったorz time = 0 white(true) { start = System.currentTimeMillis(); 処理(移動などの処理はtime時間分の計算をする) time = System.currentTimeMillis() - start; }
メインループの回転数を固定にしする方が賢いような気がするけど。 全部にtimeを掛けてたら大変だし。
609 :
589 :2007/11/14(水) 17:39:03
>>606 ビジーループって電池食いそうで嫌だったけど
その手があったか
それで行ってみます
>>610 前スレのFPS固定ロジックでいいんでないの?
sleepが嫌なら while(time > System.currentTimeMillis() ); みたいな感じで済む話だし。
座標計算だけならいいけど、sprite使ったアニメーションにまでtime掛けて管理とか、
どうしてもメインスレッドをsleepしたい場合やサスペンド対応考えると
time一個でどうにかすんのはムズいんじゃないかな。
まぁ時間で管理したほうが確実なんだけどさ。
>>591 げ、エミュって内部でタイマーなんて使ってんのか
System.currentTimeMillisですら16ms単位くらいで値よこすから、エミュだとデバッグしづらくなってきたんだよなぁ
ちなみに仕事では当然のようにビジーループ
「sleepにすると電池の消費が少なくなる」なんてのはP504iだけだったと記憶してる
613 :
589 :2007/11/14(水) 20:07:29
>>612 ビジーループで時間計ったけどsleepの時と変わらなかったのは
System.currentTimeMillisでも16msだったからか
んなーこたーない
614は612のレスね
Vistaは1ms単位で測れるよ
>>613 実機でログ取るべき。
大抵は10msec単位またはもっと正確な値が取れる。
質問です いままでiアプリではGIFとJPEGしか扱えないと思っていたのですが、PNGもいけるのでしょうか? (これは実機で確かめればいいとしても) 対応画像形式一覧みたいなものをMediaImageの項などで探してみたのですが、見当たりません どの資料かにまとまってますでしょうか?
Windows上でのエミュだけの問題ならtimeBeginPeriod(1)を呼ぶような 別のプロセスを立ち上げておけばいいんでない? 自分で作るのが面倒ならメディアプレイヤーで何か再生してやるとか sleepの実装がWin32APIのSleepを呼んでるなら1ms単位になるはず
>618 iアプリ開発ガイド詳細編を読もう
>>612 sleepにしてもバッテリ消費にはあまり影響ないのね。
描画(2D)を減らしたら消費減るのかな、とか興味があって、
1度検証してみたいとは思ってたけど結局やってないなぁ。
えっと、PNGは無理みたいですね なんでいつまでたってもPNG対応しないんでしょう。SoftBank版と互換したいのに
いつになったら、って問題じゃないと思うよ 大人の事情だろう
単純にgifやjpegに変換して振り分けるのが吉
SoftBankがGIFを使える件 制限あるけど。
PNGが読み込めないのはドコモダケ
前すれログって読めないんすかねぇ・・・。 最初の方のフレーム制御関係を参照したかったんですが。
PNGはフリーなんだから、大人の事情もなにもないと思うんだが
>>629 対応に関してのコストはどこから出るのでしょうか
630笑えるw
632 :
627 :2007/11/15(木) 11:47:07
反論に困ったら「笑えるw」wwww
634 :
デフォルトの名無しさん :2007/11/15(木) 18:45:13
>>627 過去ログ読もうとしたらよむ方法かかれてるでそ?
635 :
デフォルトの名無しさん :2007/11/15(木) 19:27:56
カメラが起動しようがムービープレイヤーが起動しようが 画像を表示させるってのはできるのかな? ロゴとかをずっと表示させときたいんだけどさ
ネイティブの機能が起動しちゃったら無理。
>619 それ意味無い おそらくエミュはShortTimer使ってる。もう完全にアホの仕事 ちなみにMSNMessengerがtimeBeginPeriod(1)してくれてるぞ。豆知識な
そこはWindows Media Playerだろ
スレのトピックスでアプリ省サイズ化ツールとしてJavaBlenderとjargが載っているけど、 ProGuardってマイナーなのかな? ProGuard3.7を使ってて特に問題なさそうなのだけどトラブル経験ある人いるんかな。 4.0、4.1と出てるけどどうなんだろ。
proguardしか使ったことない。 他の2つは2年以上更新されてないから心配。
>ProGuardってマイナーなのかな おいw
JavaBlenderは結構うまくいかないときが多い。 特に900以降の場合サポートされていないので、現在では使用していない。 今俺がやっているのは ProGuard(3.10)→Jarg(バージョン忘れたが最新)→7-Zipだな
仕事でソフィアクレイドルの糞高い圧縮ツールを使ったら実際に圧縮率は良かった。 ただし圧縮率を上げまくると実機で動かない場合が出たが・・・ もしも購入出来る金があるのであればお勧め。
ProGuardはバージョンが上がって変換後のサイズが従来より 大きくなるケースがあるな。 具体的な不具合が出ない限りは小さくなるバージョン使ってるがw
645 :
デフォルトの名無しさん :2007/11/16(金) 11:11:57
カメラ起動ならフレーム撮影みたいな感じにすればまだロゴ出せるんじゃないか? プレイヤーは正直思いつかない
proguardは4.0ですごくサイズが小さくなるようになった。 3.8と比べて2kくらいは減る。3.9/3.10は3.8よりでかくなる。 もうこれでないと100kにおさまらねぇwww
実機でclearキーが押ささらないんだけどなんで? ちなみにエミュでは正常に動く。 ちゃんと初回起動時に PhoneSystem.setAttribute(PhoneSystem.DEV_KEYPAD, 1); した。あと、実機はN904i
>>647 公式にある資料くらい見ろ。
(各機種オプションAPI・拡張API実装状況のPDF)
903/904/703/704ではクリアキーが実装されている機種はない。
そもそも、クリアキーはKEY_IAPPと同一キーではないのか?
649 :
452,470... :2007/11/17(土) 11:50:12
公式にある資料を読んでたら、基地局とか登録エリアとか携帯電話がつながる仕組みまで 理解しないと気がすまなくなってきた… いや、そんなことを言いにきたのではなくて Googke で「doja 5.0 N900is」で検索かけたら、 このスレの俺の発言が1ページ目に表示された。orz Eclipse+Doja5.0でDoja3.5アプリ作れるかどうか報告するといっておいて 実はまだ実行まで辿りつけないんです・・・スマソ ここまで、考えられるエラー全て見てきた気がする。orz 一度、eclipse は忘れて、Doja だけで作ってみよう。
650 :
649 :2007/11/17(土) 15:17:34
当たり前なことかも知れないが、 Doja-5.0 DK で HelloWorld プロジェクト作ったら、正常に動いた。 始めて成功して感動した。 あとは、N900iS でも動くように、Doja-3.5 アプリを効率よく作る環境を整えるだけなのだが・・・ とりあえず、Doja-3.5 と Doja-5.0 の API リファレンスは用意した。 リファレンス見比べながら、3.5にない API を使ってしまわないようにしながら、 Doja-5.0 の機能を利用できればいいわけか・・・。 独り言はここまでにしときます。 ただ、Doja-5.0 DK でコンパイルしたとき、何故か JDK 1.5 compile ... と表示されたのが気になる。 確かに、うちのPCには、Java 1.5.0 と 1.4.2 と 1.6 が入ってるけれど・・・ JDK 1.6 の JAVA_HOME も設定したし、JDK 1.6 の Path も通したし問題はないはず。 (まだ問題が起きていないだけか) ま ぁ い い や 。 エミュレータを動かせたので大満足。次はアップロード先を探さなきゃ・・・ チラ裏スマソ
pathのほうが優先されてるだけじゃね? 頑張ってるみたいなんでもうひとつアドバイス。 ・JDKインストール ・OS再起動 ・Eclipseインストール(pleiadesのどれか適当に) ・iαppliToolインストール ・Eclipseを立ち上げてワークスペースをiαppliToolのappsに設定 ・helloWorldプロジェクト作成 ・srcフォルダにソースを作成 ・実行→構成および実行でDoJa5.0アプリケーションのフィルタを作って実行 ・動いたら apps/helloWorld/bin/ にある helloWorld.bin,helloWorld.jam,download.htmlの3つをサーバへアップロード ・携帯からdownload.htmlへ接続、アプリをダウンロード ・携帯でアプリ実行 で、どーよ?
progurdで圧縮するとアプリが終了してしまうんですが 原因はなんでしょうか。 System.gc()で終了したので消してみたら 次はImageのuse()の16回目の呼び出しで終了しました。 catchも呼び出されません。
圧縮されたときにいやーんなコードを書くのが原因。
>> 652 proguardをかけた後、逆アセしてコード見てればいいんじゃねぇ? 時々変なコードに変換されているときあるから。 それでそれがローカル変数で問題になら、その変数をクラス変数に替えることで 正常に動作するというときもある。
「押ささらない」ってよく変換できたな。何弁?
北海道弁
657 :
652 :2007/11/17(土) 18:06:58
>>654 みんなアセンブリとかも分かるのか
自分は分からないし圧縮しないと収まらない訳じゃないから諦めよう
658 :
654 :2007/11/17(土) 19:49:16
>>657 逆アセって言い方が悪かったのかな?デコンパイルって言えばいいのかな?
jad.exeの引数にクラスファイル指定するだけだから簡単にできる。
出力されるソースも、ほぼjavaのソースと同じだ。
言い方が悪いっつーか逆アセとデコンパイルじゃ意味が違うじゃん
俺は許容が広いから「あぁ、そういういみなんだろうな」と理解できた。
>>658 は、頭悪い上司を持つと苦労するタイプだろうw
661 :
デフォルトの名無しさん :2007/11/17(土) 20:51:06
>>651 神!ty!
あと2時間でサーバーへアップロードしないと
次の作業まで2週間待ちになってしまう。。。
とにかくも651に感謝m(。_。)m
662 :
デフォルトの名無しさん :2007/11/17(土) 21:27:51
>>651 の書いたとおりにやったら、動いた!!すごい
なんで動いたかよくわからないけど、今日はもう時間がないため
とりあえずアップできるサーバーを探さなければ・・・。
651の内容のうち、前半は既に済んでいたので、以下のみ行った。
・Eclipseを立ち上げてワークスペースをiαppliToolのappsに設定
iαppliTool で指定している作業フォルダを設定した。
・helloWorldプロジェクト作成
helloWorldプロジェクトは既にあったので、別名のプロジェクトを作成した。
プロジェクトを作成した後、ウインドウ−設定 で、Doja-5.0 のインストールフォルダを指定した。
(これを設定しないと、クラスがうまく作れなかった)
・srcフォルダにソースを作成
Eclipse でクラスを作ったら、自動的に作成された。
クラスは、スーパークラスを com.nttdocomo.ui.Application とした。
・実行→構成および実行でDoJa5.0アプリケーションのフィルタを作って実行
無事、動いた。
残りは、以下の作業だ。携帯が手元にないので;; とりあえずサーバーへアップロードしたら
場所移動して携帯でチェック。報告は明日以降になりますm(。_。)m
---残りの作業
・動いたら apps/helloWorld/bin/ にある
helloWorld.bin,helloWorld.jam,download.htmlの3つをサーバへアップロード
・携帯からdownload.htmlへ接続、アプリをダウンロード
・携帯でアプリ実行
まったく、デコとかパイとか。
>>652 -dontoptimizeつけてみるとか
665 :
652 :2007/11/17(土) 23:51:16
>>658 jadファイル自分の力と気力じゃ解読不能みたいでした。
>>664 それはもうつけました。
とゆうよりつけないと圧縮できませんでした。
proguardのバージョン変えてみるとか?
> そもそも、クリアキーはKEY_IAPPと同一キーではないのか? うお、これでうまくいったよ!ありがとう! つーかそんなとこに割り振られてるなんて気づかなかった・・・
668 :
652 :2007/11/18(日) 10:49:18
proguardかけた後にjargかけたら出来るようになりました
>>668 それはProGuardの後にpreverifyをかけてなかっただけじゃないのか?
670 :
デフォルトの名無しさん :2007/11/18(日) 13:41:51
671 :
デフォルトの名無しさん :2007/11/18(日) 21:17:11
・・・サーバーにアップしたファイルのアクセス権をミスって2週間ダメにしたorz
672 :
デフォルトの名無しさん :2007/11/20(火) 02:42:56
リモート制御機能ってトラステッドアプリでしかダメだよね?
674 :
672 :2007/11/20(火) 06:20:30
>>672 APIリファレンスに書いてあるんだけど、
開発ガイドには全く書いてない。
public class PushManager
プッシュ機能の管理オブジェクトを定義します。
リモート制御におけるプッシュ機能により、
サーバから i アプリにパラメータとパラメータを送信した時刻(パラメータ更新時刻)を渡すことができます。
渡されたパラメータとパラメータ更新時刻は、JAM が受信して保持します。
i アプリからは、JAM が保持するパラメータと パラメータ更新時刻を取得することができます。
また、i アプリ起動中やサスペンド中に JAM がパラメータを受信した場合には、
ParameterPushListener により定義されたリスナが呼び出されます。
エミュレーターのトラステッド動作設定にもリモート制御の項目が無いし、気になったもので、、。
>>675 サンクス、
そんなサービスがあるとは知りませんでした。
ADF設定のTrustedAPIDって、 勝手アプリで設定しとくと、 実機じゃ正常動作できませんか?
できたらトラステッドの意味がねぇw
>>678 そりゃそうなんですけど。
TrustedAPIDの正誤をいつどこで確認してるのか気になったのです。
DL元ホスト(IPアドレス)とAPIDを一意に結び付けて、
DL時にdocomoのサーバに問い合わせるとか…?
くらいしか思いつかなかったのですが。
今試してみたらTrustedAPIDを書いてるとDL自体出来ないみたいです。
Subversionでソース管理しようとしてるんですが、 コンパイルするとresディレクトリにある「.svn」ディレクトリもバイナリに含んでしまいます。 コンパイルオプションで特定のディレクトリ以下のファイルは含まないとかできないんですかね?
>>681 コンパイルはbatで行なってるんでしょ?
直前に.svnを別のところに退避させて、コンパイル終わったら戻すようにしたら?
今時バッチファイルでコンパイルしてる人いるの・・? IDKかANTかと思ってたが。
684 :
681 :2007/11/26(月) 15:23:11
>>682 コンパイルはbatじゃなくてふつーにIDKでやってます。
とりあえず開発時はそのままやってて、実機テスト&リリース時は別ディレクトリに移してコンパイルしてる状態。
この手間がちょっと面倒なんで改善できたらなぁと。
>コンパイルオプションで特定のディレクトリ以下のファイルは含まないとか 普通に出来ますが
>>681 俺は画像格納用のフォルダをresとは別に用意しておいて、
resフォルダはsvnの管理から外してる。
(spに詰めるバイナリ生成ツールがそこにあるからでもあるが)
まぁ、どっちにしても手間なんだけど
バッチ使いも結局バッチを書く手間はあるわけで、
自分にとってベターな方法を模索するのがいいんじゃないかと。
普通にbat使ってますがなにか
プリプロセッサやら、プロガードやら使うからbatが主流だろう。 というのは仕事としてやってる人の考え方だったのかな IDKってコンパイルオプション指定なんてできたっけ?(JAM指定呼び出しでしかエミュレータ呼び出さないもんでw)
idkはビルドの前後にbat指定できなかったか
とりあえず俺はeclipseの出力jarにbatでオブファスケータかけてる
>>690 batの指定というよりビルドの前後にコマンドの指定ができる感じだな
とはいえオブファスケートしちゃうとコンパイル以外idkが自動でやってくれたのは全部やりなおしになるから存在意義が・・・
ていうか何十個もある端末用の個別のファイルをいちいち手作業でGUIでクリックしてつくるとか考えられない。 途中で間違う可能性もあるし。
>>693 何十個っていったい何をそんなにわけてるの?
その状況が想像できないのだが…
>>694 相当昔の端末までサポートしてるなら不思議じゃないけど
>694 例えばSystem.getProperty()で取れないような機種別情報が必要なら 何十個もjarを作るかもしれんな。具体的にどんな情報かは知らないが。 それなら機種名を渡してサーバ上に用意した関連情報を引き出す 作りにすればグッと数を減らせるだろうけど、 通信できない(しちゃいけない)事情があるとか。
つかサウンドデータだけでも十数個のセットになるやん
えっ?
今でも新規案件でmova対応ってあるの? うちはもうfoma限定だなぁ。 サウンドは通信で取得するかアプリ上で分けるかだな。
701 :
686 :2007/11/27(火) 13:55:28
>>689 一応俺もプロなんだがサイズに困るほどのアプリが殆どない。
圧縮するにしても100k超えることは滅多にないし
904で無圧縮状態でテストしてOKだったら圧縮して動作確認しておしまい。
毎度圧縮する必要性を感じないからIDKのみで十分。
>>700 たまーに勘違いな営業さんが「全キャリア全機種対応」とかほざいて
一応話聞いてみるとmovaも入ってたりするよね。
帰ってもらうけど。
画像が最後まで読めないです com.nttdocomo.ui.UIExceptionが出てるんですけど これは機種の問題ですかね?
>>700 mova含めないとサウンドデータだけで十数個のセットならないし
何十個もある端末用の個別のファイル作る必要性も微妙だし(1機種1ファイルのレベルになる)
Doja 4.1、902世代以降をターゲットにゲームとか作ってます。 Graphics2において、アフィン変換かけてgif画像を回転させて描画させているのですが、ジャギが気になります。 OP_ADDでアルファブレンドしたら若干マシにはなるのですが、描画数が多いので負荷が気になります。 もっと良い解決策はないでしょうか?
ありがちだけど、あらかじめ計算したパターンを持っちゃう。
DDTでもジャギは出るでしょ。 回し方の問題じゃないから。
回転させてもジャギが目立たないような色合いのグラフィックを描く。
100K超えることは滅多に無いってなんの話? jarの話?アプリ全容量の話?
>>701 画像や音声は全部通信でとってくるし、うちもJARは100K超えることはないかな。
今は音声だけカテゴリ分けしてるけど、VGA機種向けに画像も分けるようにしないと
いけなくなるんだろなぁ。
mova除外だけだと、FOMA701とか702なども対象になるけどそこら辺は含めるんかな。
30Kは物によっては相当きついよね。事前に収まるかどうか予測できるプロならいいけど
私にはできん。
711 :
デフォルトの名無しさん :2007/11/28(水) 10:18:15
ドコモ制限キツすぎる。。。
機種依存考えると頭がパンクしそうだぜ
>>711 制限的にはドコモが一番マシなんだが・・・
携帯アプリを匿名で配布したいと考えると Docomoかauのオープンアプリになるわけだが、 auのオープンアプリの制限は半端じゃない('A`)
Sアプリの機種依存の多さは異常 公式資料が豊富だからまだ良いが
>>709 変な日本語書いて申し訳ない。
jarの話。
>>710 30Kはアプリ仕様からソースがどの程度の規模になるか推測して、
ソース5000行程度を目安にしてる。
まぁ感覚だからアテにできないけどねw
100Kの壁に苦しんでる人たちはどうしてるんかな。
迷わず仕様削減
勝手アプリだが うちだとログとか見る限り7割のユーザーが903i,904iだから最悪メガアプリにして切捨てになるんじゃないかな まぁまだ100Kの壁に当たってないけど
proguard(しかも4以降)をかまさないと100K超えるですよ。 さらに定期的に更新してるんで毎回どきどきですよ。
100K超えるプログラムってどんだけだよ
単機能のツール系アプリでも、UIやfool proof、例外処理にこだわると 結構サクッと100KiBの壁にぶつかるんだ、コレがorz
プリプロセス使わなければ簡単に100kくらい超えるでしょ?
超えねーよw
俺の今作っているのは173,292バイトになってるけど
規模と設計によって容量なんて大きく変わるから一概には言えない問題だろ
100k超えるってヤシは まさかとは思うけど文字列とかデータ配列とかはjarに入れてないよね?
今調べたら俺が仕事で作った奴で最もでかかったアプリは クラス数200オーバーで画像リソース200kくらい混みで Jarサイズが600kだった('A`)
クラスをガツンガツン使えるような時代になったのはいいことだ。 はやくFOMA以下を切り捨てたい・・・・orz
>>728 FOMA以下ってことはFOMAも捨てるってことでおk?w
createImageの作り方がどうしてもわからんす どっかサンプル置いてるとこないですかね? sampleから理解するのは得意なんですけど
Image image = Image.createImage(640, 480);
>>731 質問をよく見るんだ!
createImageの使い方ではなく、作り方を聞いている!
public class Image { public static Image createImage(int x, int y) { return null; } }
>>733 完璧だな
public class Image {
public Image() {
}
public static Image createImage(int x, int y) {
return new Image();
}
}
の方が良い気はするが
DoJa 5.0 の Ver3 以上のエミュレータについての質問です。 コマンドプロンプトから DoJa.exe を実行した場合に System.out.println の結果が表示されないようです。 また doja.exe -version 等、何らかの出力が期待されるオプションをつけて起動しても、 コンソールに何も出力されません。 これはエミュレータのバグでしょうか?それとも何か出力を受け取る方法があるのでしょうか?
>>736 エミュのバグだと思われる。
たぶん直感アプリのために使っているのだろうけれど
基本的には、Ver3.00を使わないか、Doja5.1のエミュで間に合わせる。
どうしてもVer3.00でなければならない場合、あらかじめエミュを立ち上げておいて
アプリの実行位置にプロジェクトの場所を合わせておき、コンパイルの後に
エミュの起動ボタンで実行するようにする。
アプリから 画像データとサウンドデータと表示座標データとテクスチャ座標データと文字列データ を切り離しても100Kに収まらず、アプリ連携で機能も切り離して、 それでも100Kぎりぎりな今日この頃。
>738 企画が悪いんだろう iアプリ100KBに向かないアプリを無理に作ってるとしか
>>739 2年以上バージョンアップを繰り返してるからねぇ。まぁしょうがない。
クラスが増えると、 たいした機能が無くてもアプリサイズが増えるね。 保守性にかかわるから、クラスは気にせず作りたい…。
>>738 常に速度が要求されないなら高度なスクリプトエンジンを組んでコードごとSP側に退避するべし
MediaSound sound=MediaManager.getSound("resource:///sound.mld"); でリソース内のmldを読み込んでいるのですが、 メモリ内に存在するmld形式のバイナリデータを getSoundに渡す方法ってありますでしょうか?
リファレンス嫁
745 :
デフォルトの名無しさん :2007/11/30(金) 09:47:28
JAVAで文字のサイズを変換するプログラムがわかりません!! わかるひと教えてください。。
文字のサイズって?
Font font = Font.getFont(Font.SIZE_TINY); g.setFont(font); ってことじゃないのかい?
>>745 フォントサイズを設定したいのかそれともフォントイメージの拡縮をしたいのかによって変わるが
前者なら747だし後者なら一回Imageに描画して自力で拡縮しなさい
ちなみに「文字のサイズを変換」という日本語だとどちらかといえば後者の意味に取れる
前者の意味の日本語は「文字のサイズの設定」や「文字のサイズの変更」だな
VGA対応機種以外ではSIZE_LARGE,SIZE_MEDIUM,SIZE_SMALL,SIZE_TINY以外のフォントサイズを作るなら後者の方法で作り出す必要がある
VGA対応機種ならFont.getSupportedFontSizes()で対応フォントサイズの配列を取得できる
後は自力で拡縮する以外にもリソースなどの画像データとしてフォントイメージを持ってしまうという手もあるにはある
905iのjamのDrawArea、皆さんどうしてますか? 仕様としては240*240 or 480*8nn(機種による)の2択だと思うんだが、 ちょっとN905i(480×854)で試してみたところ、240*427で全画面描画ができた。 縦横比はそのままに、2倍で拡大表示してくれている。 以前はこういうこと、できなかったと思うんだが・・・。 ただ、このままだとソフトキーが浮いてしまうので (画面最下部よりちょい上にソフトキーラベルが表示されて、 アプリが描画するコンテンツと被る)、 ちょっと縦を切り詰めて240*320くらいにしたら、ソフトキーも 被らず、ちょうどいい感じに。 デフォルトの240*240だと縦横比1:1なので、全然こっちの方がいい。 とりあえず全機種905iはxyを1/2した上で110ほど縦を切り詰める DrawAreaにしたら、D905iのユーザから拡大表示されず240*330が画面真ん中に ちょこんと表示されるというメールがきた。 N905iは特殊で、やっぱり240*240 or 480*8nn(機種による)の2択しかないんでしょうか。。。
750 :
デフォルトの名無しさん :2007/12/01(土) 18:32:11
簡単なコードを書いてEclipseで実行すると 「新規構成の起動 Reason: Check the details」とメッセージがでて 実行ができません。アドバイスお願いします。
>Eclipseで実行すると ここ、具体的に何をどう操作したのか詳しく
752 :
デフォルトの名無しさん :2007/12/01(土) 20:33:10
>751 お騒がせしました。解決しました。環境変数の設定をしていなかったようです。
>>749 N904iは前から出来たが?
480x704だから240x352の解像度表示が可能だよ>N904i
もちろんハード側が自動で2倍拡大してくれる
さすがにハードではないだろう
システムか
便乗でDrawAreaについて質問させてください。 P905iを買ったので自作のアプリをWVGA対応しようとしてるんだけど、 480x640だと上下にスキマ(WQVGA機で240x240のを動かした時に出る のと同じような枠)ができて、しかも上下でスキマのサイズが違う。 かといって高さを640より大きくするとピクト(電波とか電池とか時計とか)が 消えてしまう。 できれば、上下スキマなしでピクト消えないようにしたいんだけど、 どうすればいいか、どなたかご存知ないですか。
>753 ごめん。かなり書き間違えた。 >480x704だから240x352の解像度表示が可能だよ 240*240 or 480*8nn or 480/2*8nn/2 ↑の3択までは分かるんだけど 240*240 or 480*8nn or 480/2*8nn/2 or 480/2*((8nn/2)-n) の4択がN905i(480*854)では可能だった。240*330が拡大表示される。 D905iでは4番目ができなかった。
JAVAてc/c++と比較すると恐ろしいほど簡単だね
まるでC/C++が難しいかのような口ぶりだな
覚えることはCの方がはるかに少ないのだが
761 :
デフォルトの名無しさん :2007/12/02(日) 16:11:02
Eclipse3.3にて開発しようと思っています。 DoJa-5.1API iappli Development Kit ユーザーズガイドの P322のリモートJavaアプリケーションの設定ができないのと、 P311の作業をして折りたたみ状態を閉じるにすると Connecting to 127.0.0.1 on port 2800 Waiting for debugger on port 8000 assert: offScrId != 0: invalid offscreen id と記録され固まりますアドバイスお願いします。
>>758 C と C++ を一緒にするなよwwwwwwww
>>701 > たまーに勘違いな営業さんが「全キャリア全機種対応」とかほざいて
たまーに、どころか良く居るよ。
で、BREW版と同時開発した場合の問題点とか話してやると「プログラマ的には
JavaとCの違いは大きな問題ではないが…」って辺りで理解できなくなるようで、
逆切れされたり、あいつはCを知らない!なんて陰口言われたり。
面倒なので最近はFLASHお勧めwwwで逃げてる。
764 :
デフォルトの名無しさん :2007/12/02(日) 18:35:01
JAVAてc++と比較するとホント簡単な言語だよな vc++になればswingの100倍は難しいよな
JAVAてこんな習得のしやすい簡単な言語だと知ったときは びっくりしたよ。C#もそうだけど 最新の言語は習得が楽でいいよね
JAVAていろんなこと出来る上に 習得のしやすさはスクリプトレベルだから 初心者が集まりやすいよね
言語の問題なのかね ライブラリの差に依るような気もするが
769 :
デフォルトの名無しさん :2007/12/02(日) 19:22:29
Javaなんて使えないよ。 C++(BREW)で実用的なJava実行環境(MIDP/iアプリ)は実装できるけど、逆は無理だからね。 C++>>>Javaなんだよな。 C++が使えればJavaでできることはすべてできるし、同じ処理を何十倍も高い性能で実現できる。 JAVAてC++と比較するとホント低能な言語だよな
iアプリレベルになると大規模なWEBプログラムの方がまだ難しいんじゃないかと思う
最近のアプリは結構難しくなってきてると思うけどなぁ PSクラスのゲームならほとんど移植可能だろ
Cと比べるとどんな感じ? 今C勉強してるんだけど、一通り終ったらjavaで簡単なアプリ作ろうと思うんだ。
C++じゃなくてCと比べるのか それはだいぶ違う感じだと思うよ
先日、再びiアプリのダウンロードにトライしたのですが、
またダウンロードできず(⊃Д`;)
よくよく調べてみると、対応しない端末?でダウンロードを試みたときに出るエラーが出てました。
まぁ、notapplicable.html を作っていなかったので、エラーページすら見つからないというエラーでしたが・・・。
>>662 のように i アプリを作り、その後、端末 F900iS でダウンロードしようとすると
notapplicable.htmlエラーが表示されるらしい。
Eclipse は 3.3.1.1を使ってます。
Eclipse 3.3.1.1 + Doja-5.0 でコンパイルすると F900iS(Doja-3.5)ではダウンロードできなくなってしまうのかな。
i アプリの内容は、ダイアログボックスに「helloworld」と表示させるだけの簡単なものです。
一応中間報告。
2週間も間が空きすぎてしまっているので、この後、もっかい原因究明して、
脳みそを i アプリ開発モードに切り替えねば。
776 :
デフォルトの名無しさん :2007/12/03(月) 00:46:24
金魚運動マシーン
>>772 せめて少しでいいからC++も知っておく方が良い
別にSTLを使いこなせとかは言わんから
C++でクラスの概念と継承やメンバ関数やインスタンスの概念を知ってるだけで全然違うから
>775 ウザイ。 何か報告したい問題点や質問があるなら要点をまとめて書きなさい。 だらだらと日記を書くのはブロク作ってそっちでやりなさい。
>>773 そーなのかー。
ども。
>>774 似せたつもりは無いんだ。
気付かなかった
>>777 了解。終ったらC++一通りしてみるか。
ありがとうございます。
>>772 つうか、なんで素直にJavaやらないんだ?
>>780 先にCはじめたからかな。
2言語同時進行はつらいよな
すみません,初歩の質問なんですが doja でpanelで setTitle()で表示するタイトル文字サイズの変更ってできますか? いろんなサンプルためしても905シリーズだと字がちいさすぎるみたいなので
>>782 無理だった筈
N904iでもVGA表示するとタイトルが小さくなりすぎて結局俺の場合canvasで自力描画した
まぁ容量的余裕があったのとpanelで表示してたのがTextBoxだけだったってのが大きいが
容量的余裕が無いなら諦めるしかないと思う
panelのコンポーネントのsetFontはそのコンポーネントにしか干渉しないし
>>783 ありがとうございました
やっぱり無理なんですね...
なにか他の手考えます
>782-784 コンストラクタで↓こんなことしたアプリでは、 super(); Font f = Font.getFont(Font.FACE_SYSTEM | Font.STYLE_PLAIN | Font.SIZE_MEDIUM); //24x24 Font.setDefaultFont(f); setTitle("タイトル"); タイトルは12x12のフォントサイズで、TextBoxやLabelは24x24サイズで表示される。 ところが2回目以降にnewしたものはタイトルが24x24のサイズで表示される。 エミュレータでも実機でもそうなる。不思議。
>>785 Panelから継承したクラスのコンストラクタでのことなら
Panelのコンストラクタでデフォルトフォントのフォントオブジェクトを取得してるってことなんじゃない?
それならその挙動はいたって普通で不思議でもなんでもないと思うのだが?
Panelオブジェクトを生成する前にFont.setDefaultFont()でタイトルに使用するフォントをセットしておけばいいってことだよな
デフォルトフォントの設定をIApplicationのstart()とかで行ってしまえば以降ずっとタイトルもフォントサイズが変更されるってことでしょ
787 :
784 :2007/12/04(火) 19:35:22
788 :
785 :2007/12/04(火) 19:40:30
>786 >デフォルトフォントの設定をIApplicationのstart()とかで行ってしまえば >以降ずっとタイトルもフォントサイズが変更されるってことでしょ そうなった。勘違いだったようだ。thx じゃぁこれで>782も解決ってことかな。
StringBuffer sb = ("ABCD"); int z = sb.indexOf("BC"); とすると二行目で「シンボルを解決できません」となるんだけど もしかして全部のメソッドは使えない?
iアプリ一覧に表示されるときに 使われるアイコンは作れて表示できたんだけど、 大きく表示されるほうのアイコンがiアプリのマークのまま。。。 モバイルナナコのアプリはちゃんとカードのアイコンに変わってるんだよね。 どなたか情報持っていませんか?
職場にiアプリの宿題やってくれてtelが来た((((゜д゜;)))) 今時の学生さんは・・・
で、いくらでやると答えたんだ?
>>790 J2SEとDoJaのSDKは入れたけど、そっちは未チェックだった
サンクスコ
ぼちぼちやるわ
>>791 iアプリコンテンツ開発ガイド最新版のP217、
エミュ付属のDevGuide.pdf P65。
ADFの項目のAppMainTitleで設定できる。
項目名で惑わされるが、ここには画像のファイル名を入力する。
AppIconと同様に、160x160のGIF/JPEG画像resフォルダに入れてビルドすればOK。
AppIconと違って、DoJa-5.1プロファイル専用なので注意。
コマンドラインからiアプリのビルド→svnでコミットってできないものかね。 毎回更新が面倒なので自動化したい
>>795 ありがとう〜画像名入れても出来ないからどうやるんだろうと思ってたけど
画像サイズがどうも違っていたみたい。
試してみるね
>>795 よくよく見たら載ってた。ありがとう。
試してみたら出来ました。
初めてなんで、DoCoMo公式サイトに出てるEclipse(3.1xとか)を
使いたいんだけど、古いEclipse置いてある高速ミラーサイトってない?
本系の
http://www.eclipse.org/だと 、速度が15K/secくらいしか出ない・・・orz
JDKから再インストールしても、エミュレータがCPU時間を占領してしまう症状が治らん…… 毎回タスクマネージャで優先度最低にして凌いでる。 どうにかならんか。
sleep()使いなさい
803 :
デフォルトの名無しさん :2007/12/07(金) 01:41:44
待ち受けアプリで不在着信が有った事を知りたいんですが、 どのようにして取得すれば良いでしょうか? メールは、PhoneSystem.getAttribute(PhoneSystem.DEV_MAILBOX) で未読の有無を取得してるんですが、 不在着信では似たようなものが見つかりません。 試行錯誤してたらこんな時間になってしまい、 携帯のバッテリーも切れてしまいました。 よろしくお願いします。
>>797 いやいや、そのコンパイルするところがわからんのよ。
iアプリ用のライブラリをリンクするっていう情報をmakeファイルか何かに
書かないといけないんじゃないの?きっと。よくしらんけど
805 :
800 :2007/12/07(金) 08:58:06
>>800 自レスだが、古いヴァージョンのAll-In-One-Eclipseってのがあった。
>>804 javacのコンパイルオプションを調べれ。
iアプリに関係なく、Javaレベルでの話。
>805 解決してから言うのもなんだけど、 初めてなればこそ、HelloWorldと画像1枚描画する程度くらいまでは EclipsなしでDoJa開発キットだけでやり始めた方がいいと思う。 Eclips絡みの余計なトラブルを抱え込まなくて済むわけだし。
808 :
デフォルトの名無しさん :2007/12/07(金) 21:12:04
はじめまして。 教えていただきたいことがあります。 初めてJavaでiアプリを作ろうと考えているのですが、端末に保存したデータを 通信によりパソコンに送り、そしてパソコン内でそのデータを処理することは できるのでしょうか? 例えば、シューティングゲームの過去5回のスコアと倒した敵の数をパソコンに 送り、パソコンでスコアと倒した敵の数の平均を求める。 という感じに。 よろしくお願いいたします。
サーバーに送ることはできるので それをパソコンから見ることになるでしょう
>808 iアプリは、そのiアプリをダウンロードしたサーバとのみ通信できる。 HTTP/HTTPS で GET/POST。 詳細は>3の公式サイトから「iアプリ開発ガイド詳細編」を取ってきて熟読してな。 いま疑問に思ってることの答えは全部書いてあると思う。
>>807 アドバイスありがとう。
でも、開発環境に早く慣れるようにeclipseで行こうと思います。
JAVAは初めてで、今日はListVeiwのクラスを書いてたんだけど、オーナードロウが不可能なことに気付いた。
JAVAは関数のポインタは渡せないんですよね。
こんな場合はListVeiwクラスを継承して特殊な処理をするしかないんでしょうね。
811なんかかわいいな。 小学生?
そりゃ失礼だろ。中学生くらいじゃねーの?
815 :
デフォルトの名無しさん :2007/12/08(土) 22:58:09
はじめまして 初めてiアプリを作っていて良くわからないことがあります。 java.util.VectorをimportしたコードをiAppliTool DoJa-5.0からコンパイル してビルドも問題なくできているのに、F904やSH704に落とすときに、不正な ソフトですというメッセージが出てダウンロードできません。もちろんjamの 中のappsizeには間違いはありません。Vectorはサポートされないのでしょうか? よろしくお願いします。
この中で3Dやったことある人居る?Doja-5.0でmbacとbmpでポリゴン使おうとしたら PVmicroではちゃんと出るのにエミュでも実機でも裏表っつうか頂点ぶっ飛んでるっつうか 変な風になるんだが・・・全然わかんないんです><教えてください!!
自分を疑った方がいい
V4のFigureなんてアプリ側じゃそんなに設定項目無いんだし コンバートに失敗してんじゃね?
初めて書き込みさせて頂きます。 Spriteを使ってアニメーションをさせたいのですが、 sprite[n]に格納した画像を順番にforで一枚だけisVisible(true)にして、 drawSpriteSetで描画すると、前回描画し、今回はisVisible(false)にしたスプライトも残ったままになります。 背景を最描画し、その上に再度drawSpriteSetすると一応アニメっぽくはなるのですが、背景を再描画しなくてよい方法などございますでしょうか? ご教授よろしくお願い致します。
>819 ない。 描いたものはプログラマが(上描きや塗り潰しによって)消さない限り消えない。
821 :
デフォルトの名無しさん :2007/12/09(日) 13:34:35
オルタ正直期待以上!!! シナリオはオリジナルより面白かったしwwwキャラも愛着持つほど魅力的ww 『アプリゲームじゃなぁ』なんて思ってただけに、出来の良さにビックリwwww ダウンロード方法 ☆FOMA900シリーズ/ソフトバンク/ 「EZトップページ」→「ゲーム」→「RPG」→「アトラスweb site」→「グローランサーオルタナティブ」 ☆au 「EZトップメニュー」→「カテゴリで探す」→「ゲーム」→「ロールプレイング」→「女神転生」→「グローランサーオルタナティブ」
あぁ、俺の携帯、アプリ動かない奴だから('A`)y-~~ アプリは仕事で作ってるだけ。
俺も俺も
なにを隠そう俺もだ
俺はむしろウィルコム
ゲームアプリ好き≠アプリ制作者 仕事で作ってると嫌になる時がある。
ていうか仕事で作っててその作ってるアプリ自体が面白いと思ったことは無いな なぜなら最初の段階ではバグだらけでまともに動かないし、まともに動くようになると飽きている。 まあバグつぶしていって段々動くようにしていくこと自体が一番面白いっちゃー面白いんだけどね。
若ぇな坊や。 携帯アプリのやたら規模の小さいプロジェクトは ソースコード、リソースの管理のミニマムケースとしての 実験にはもって来いの環境だし、 プロジェクトに関わる人数も少ないから、コード規約とか 作成環境のテストにも非常に向いてるんだぜ? ゲームは糞だが、ソースは美しい、それ以上は望まねぇw
そんなもんに金払うユーザーはたまんねぇな
俺の最終顧客はクライアントであってユーザーじゃねぇからなw
俺は自分の作ったアプリは マスター前日くらいにやると面白いと感じる それまではバグ取りばっかでプレイなんかしたくない
てか俺は携帯自体もってねーよ
あるあるww
>>820 ありがとうございます。
スプライトって当たり判定にしか使えないんじゃ…
画像によっては衝突判定も役に立たないよ 円を描いた透過画像が斜めに衝突するとき、 画像は接触してないけど矩形が接触してるから「衝突してる」 行列操作で形が変わってるとき、 画像は接触してるけど元の矩形が接触してないから「衝突してない」
土日このスレ見てなかったもんで始めましての数に吹いたw
837 :
デフォルトの名無しさん :2007/12/10(月) 23:27:36
そうだったのかぁー! 待ち受けアプリ作ってるんだけど、sleep();の後も実行続けるのね。 sleep();したらそのまま端末に制御が移るのかと思って2時間悩んだよ。
? sleep()中は一部のイベントが発生する以外は、何の命令も実行されない そもそも、sleep()するには、その前に、制御を端末に移す(非活性化状態にする)、deactivate()を発行しないといけないはずなんだが… 何を悩んだんだ?
今更気づいたけど、文字列の中に直接絵文字打ち込んでもちゃんと表示されるのね。 ずっと "\uxxxx" てやってたよ。 全機種大丈夫かちょっと心配だけど。
840 :
デフォルトの名無しさん :2007/12/11(火) 19:55:57
deactivate()は実行してるんだけど、sleep()がreturnと同じような挙動をすると思ってた。 sleep()を実行するとすぐに端末に制御が移り、省電力モードに移行するのかなと。 それで、sleep()の後のコードが実行されているとは思わず悩んでました。 実際は省電力モードに移っても良い事を端末に知らせるだけで、 その後もコードの実行は続いてるって事だよね。 つまり、sleep()を実行しないでdeactivate()だけで処理を終えても電池の消耗の早さが違うだけで、 アプリの挙動は変わらないって事でいいのかな。
>>840 >実際は省電力モードに移っても良い事を端末に知らせるだけで、
>その後もコードの実行は続いてるって事だよね
えーと Java のライブラリのメソッドや Windows の API や unix のシステムコールの
sleep や Sleep というのは、省電力等の話の場合の「スリープ」とはあまり関係なくて、
単に「今することないからしばらくこのスレッドやプロセスのコードの実行を停止して」
というような意味で、実際の動作もそんな感じです。
全てのスレッドが sleep や何かのイベント待ちになっていると、OS はそれを契機に
CPUなどを省電力モードに移行させるかも知れませんが、それはまた別の話。
なんかThread.sleepと待ち受けのMApplication.sleepが混ざってね?
>>840 >つまり、sleep()を実行しないでdeactivate()だけで処理を終えても電池の消耗の早さが違うだけで、
>アプリの挙動は変わらないって事でいいのかな。
アプリの内容にもよるけど、かなり違う。
sleep()が発行されると、休眠状態になり、すべての処理は一旦停止、キューにたまっているイベントもすべて破棄される。
その後、端末を開くなどして、システムイベントが発行されると、非活性化状態に変わって、
sleep()の次の命令からアプリが再開される。
時計なんかで常時書き続けなければいけないアプリでsleep()発行すると、時間が進まない。
deactivate()呼ぶだけなら問題ない。
(分単位の時計ならsetWakeupTimer()で解決するけど)
844 :
デフォルトの名無しさん :2007/12/11(火) 22:16:32
>>841 sleep()ってiアプリだけじゃなかったんだね。
iアプリの入門書読んだら終了するみたいに書いてあったから勘違いしてた。
>>843 一応止まってたんだね。
WakeupTimerセットしてたから、スルーしてると思った。
と言う事は、sleep()で止まってる時にWakeupTimerのイベントが発生すると、
まずsleep()の次が実行されて、その後端末に処理を戻さない限り
processSystemEvent()が発生しないのかな?
>>844 processSystemEvent()の実行も、sleep()の続きの実行も、
並行に両方とも行われる。
>>844 まずはiアプリコンテンツ開発ガイドに目を通して、
「活性化状態」「非活性化状態」「休眠状態」の違いを
理解したほうがいいと思う。
>>736-737 この問題なんだが、737は「Doja5.1エミュ使え」って言ってるけど、エミュ5.1でも同様にprintlnの結果が出力されない
誰か5.1(でも5.0でもいいから)でコマンドラインからのエミュ実行した状態でprintln出力できた人いないか?
>>848 ありがとう。ファイルに出力するのはできた
でも
doja.exe 〜色々オプション〜 >&1
とやってプロンプト自身に出力させようとすると、
ハンドル 1 のリダイレクト中に
ハンドルを複製できませんでした。
と出てしまった。プロンプトに出力することはできそう?
850 :
デフォルトの名無しさん :2007/12/12(水) 21:07:20
>>845-846 問題は一応解決したけど、なんかモヤモヤしてます。
もう一度ガイドを読み直してみます。
ありがとう。
851 :
デフォルトの名無しさん :2007/12/13(木) 01:03:18
F905iでplaySound()メソッドを使った効果音再生が出来ないんですが、 他の機種ではどうですか? 機種依存の機能ではないみたいだから不具合かな?
普通に考えたら自分の勘違いやミスを先に疑うと思うけど
>>849 doja.exe いろいろ | more
854 :
デフォルトの名無しさん :2007/12/13(木) 18:37:02
>>852 一応playSound()を使ってるらしい他の人が作ったiアプリも試してみたんだけど、
反応は全く同じなんです。
もちろん、他の音は出るのでハード的な故障ではないと思います。
それで、ここならiアプリでplaySound()を使って試せる人がいると思って質問しました。
そんな重大なバグがあったら、とっくにニュースになってるはずだろ。 マナーモードとかだったら殺す。
適切でないサウンドファイルを使っているに一票
857 :
デフォルトの名無しさん :2007/12/14(金) 07:48:44
playSound()はサウンドファイルなど必要なく、 playSound(SOUND_ALARM); などとするだけで、組み込みの効果音が出るメソッドです。 試しにN902iでやってみましたが音が出ました。 もちろんマナーモードじゃないです。 静かなところで聞くと、かすかに雑音が出ている事に気が付きました。
playSoundクラスなんてねぇな('A`) 調べるのダリー
キー確認音オフに一票。
860 :
デフォルトの名無しさん :2007/12/14(金) 11:57:48
iアプリ用に、7zを解凍できるライブラリあります?
PCから、沢山のファイルやフォルダを転送したときに
それをSD Bindで直接扱いたいんですが
いろんな制約があって簡単にはできないんですよね?
だから全部7zで固めてそれを一つのフォルダ用に
扱えたらと思っているのですが。
zipはできる(?)っぽいのでそれでもいいんですけど、
一般的に7zの方が圧縮率高いし、個人的に好きだし、
すでに7zで固めてるあるし・・・
7zが使えるライブラリがないのなら、
なんか7zのJava実装があるみたいなんで、
それをiアプリ用に実装してみようかと思っていますが、
もしかったら無駄なので。
http://www.7-zip.org/ja/sdk.html (Javaだから、まさかそのまま使えたりするんだろうか?)
展開が比較的重い上に1ファイルを展開するために全ファイルの展開を必要とする7zを使うのは 用途次第では効果があるかもしれんがjar領域を消費してSD-BIND領域を空ける必要性というのを考えた時に意味が無くないか? 普通はSD-BIND領域を消費してでもjar領域を空けるように設計するべきだと思うんだが? もちろん設計におけるトレードオフは他にもあるだろうが スクラッチパッド領域ならまだダウンロードサイズ削減と全体容量削減のためという名目が立つ可能性がゼロではないが ベタの差分画像が大量にあるとかいう前提でならjar+zip>jar+7z展開コード+7zになる可能性は有るが それならそれで差分データを差分のみ保存する等してzip側の圧縮効率を上げるほうが良い可能性もあるしな 後コンパイルしたわけじゃないがざっと見た感じ7zのjava実装はCLDCでも素通りしそうな感じはするな
>>861 前提条件として、パソコンで使用している(大量の)ファイルやフォルダを
携帯アプリでも使いたいってことなのです。
あとは、USBケーブルでファイルを送ってiアプリから触ることができる
唯一の方法であるSD Bindingの制約を知って唖然としてください。
http://blog.livedoor.jp/tonogata/archives/50988364.html ・ファイル数が英数8文字まで
つまり、拡張子を抜いたら4文字しかままならねーのですが。
・PCからのファイル作成を受け付けない
一度携帯アプリ側でダミーファイルを作り、そこにPCから内容編集&上書き保存というマニュアル・オペが必要
・サブフォルダが作れない
もういいよ。ほんと・・・
・アクセスが遅い、らしい
設計段階で躓いたので、携帯でみてねーけど。
あと、7zが1ファイルを展開するために 全ファイルの展開が必要なんて初耳なんですが?
ん?ああ、7zと言えばソリッド書庫が基本かなと思ってたが あえて非ソリッド書庫で保持してるというならなおさらにzipとの圧縮率の差は微々たる物にならないか? それこそ1割未満だろ この大容量時代にあえて容量をあまり気にしないでよい部分で1割気にするってどうよ? 後一応俺SD-BIND対応アプリ組んだこともあるし SD-BINDの制限ぐらいは知ってるが今の話題とはなんら関係ないんじゃねーか? それとファイルネームの制限は8.3までだよファイル名の本体8字まで拡張子3字まで ちなみに今有る端末が8.3形式ってだけでAPI自体はロングファイルネームも対応してるよ SDHC対応機種でロングファイルネームが使えるかの確認はしてないけどね またそこには書かれてないがファイルをアプリから生成する場合も0byteのファイルはアプリ終了時に削除されてしまうので 最低でも1byteの中身があるファイルを生成しておく必要がある これはDoJaのエミュだと0byteでもファイルが残ってくれるんだけど実機だと残ってくれない SDBINDで重くなる原因の最大のモノはSD-BINDの初期化作業もだがFolder.getFiles()がかなり重い readやwriteのアクセスよりもファイル数が多くなるとFolder.getFiles()処理の方が圧倒的に重くなるので ファイル名をある程度決め打ち処理する方が速度的には良いかな
あとSD-BINDだけがPCからiアプリへSD経由でデータを送る唯一の手段ではないんで一応そこんとこも注意しておく まぁ偽装画像技術はテキストビューアーやエミュぐらいにしか使われてはいないけどな それでも基本的には渡すデータはどんなものでも渡せるし速度もSD-BINDと比べたらスクラッチパッドには負けるかもしれんが十分に速いよ この辺もまぁ用途次第だな 詳しく知りたいならreateとかでググればよろし 確か2ch発祥の不思議なダンジョン系アプリで偽装画像技術でデータを保持するタイプのアプリがあった気がするが あれって完成したのか?
せっかくためになる話してるんだから句読点!w
もしかしたら863が勘違いしてるかも知れんので一応書いとくか 俺が言う1ファイル展開に全ファイル展開が必要ってのは a.7z(中身は3ファイル:0.txt 1.txt 2.txt) b.zip(中身は3ファイル:0.txt 1.txt 2.txt) とあった時に 1.txtのみを展開するのに7z(ソリッド書庫)では0.txtと1.txtと2.txtの全部を展開してその後1.txtだけを取る必要があるのに対して zipなら1.txtだけを展開できるってことな 別にa.7zとb.7zの2ファイルがあった時にa.7zの中身を1個取り出すのにb.7zまで展開の必要があるってことじゃないからな もちろんa.7zがソリッド書庫なら中身を1個取り出すためにa.7zの中身を全部展開する必要はあるけどな
火病りかけてる相手に そこまで噛み砕いて教えてやるとは優しいのう
俺はどちらかというとI/Oの速度より7zの展開がJVMで実行して 禿げ上がりそうな遅さになりそうな気もする。あとメモリが足りんとか 7zipのドキュメントに展開時に必要なワークメモリ量が書いてあったよね
つーかjavaのLZMAデコーダのみの実装だから7zのヘッダの処理とかは自分でjavaで書かねばならないっぽいな まぁデコーダを書く手間と考えたらそれほど面倒ではないだろうが
C++実装が2GHzのCPUで10〜20MB/sだそうだから 携帯Javaではその数百分の1ってとこか。 この手のものの利用はポーティングの手間とかメモリ量とか速度とかGPLとか考えることが多すぎて 結局、符号化方式から自作してしまったよ。
わざわざjavaで独自エンジン組むぐらいならZIPで十分な気がする まぁDoJa以外への移植も考えてならしょうがないけど S!は一応DeflaterがあるからZIPヘッダの処理部分だけ書けばZIP展開はできるんだよな
874 :
デフォルトの名無しさん :2007/12/14(金) 22:27:32
>>859 凄い!
その通りでした。
でも、情報通知音がキー確認音と何の関係が有るのか理解できない。
前使ってたN902iはキー確認音とは無関係だったのに。
それに、無音ではなく雑音が出るのも変だな。
バージョンアップで直ればバグだし、そのままなら仕様ってやつか。
ありがとう。
質問です。 SD-bindingを使ってSDカードに保存した画像は 携帯ネイティブの画像一覧から参照できない ということで間違いないでしょうか。
877 :
875 :2007/12/15(土) 00:14:46
レスありがとうございます。 素直にマイピクチャに保存します。
878 :
デフォルトの名無しさん :2007/12/15(土) 01:03:12
トラステッドアプリは個人的に作って個人で利用する事も出来ないんでしょうか? 便利な機能がたくさんあるのになぁ
880 :
デフォルトの名無しさん :2007/12/15(土) 03:15:33
教えてください。 携帯の画面上で以下のような図を表示し、 ______ | @ | A | | ̄ ̄ ̄ ̄ ̄ ̄| | B |  ̄ ̄ ̄ ̄ ̄ ̄ 携帯の数字キーから@とAに数字を打ち込むと、Bに@+Aの合計を表示する プログラムを作りたいのですが、どのようにプログラムを書けばいいのか教え てください。 よろしくお願いします。
>880 ご飯の食べ方教えてって言われて、箸の持ち方から教えるとかやってらんない。 「初めてのプログラミング」とか「初めてのiアプリ」とかいった、 初心者は何から手を付ければいいのか説明してる本を読んで。 初心者向けにiアプリの作り方を説明したサイトを10ヶ所くらい読んでみるのもいいし。
>>870 > 禿げ上がりそうな遅さになりそうな気もする。あとメモリが足りんとか
> 7zipのドキュメントに展開時に必要なワークメモリ量が書いてあったよね
http://www.7-zip.org/ja/sdk.html > 展開に要するメモリ量: 8-32 KB
> 展開のためのコードサイズ: 2-8 KB (最適化レベルにもよります)
最新機種なら十分じゃね?
スクラッチパッドとあわせて1MB
>>880 それは・・・・
まず自分でそのソフトを練習として作るレベルのものだと思われ。
それきいてたら 完
それはほんとに最低限度の場合だな860がsdkからデコーダーのみを抽出した上で(エンコーダーとデコーダーが混ざってるから) LZMAデコードエンジンだけのサイズでソレって事だし 7zのファイル処理(ヘッダ部の処理や暗号部分等)は別途必要になるんでコードサイズはもう少し肥大化すると思うぞ 目安の一つとして7zCon.sfx(コンソールの7z自己展開エンジンだと思うんだが)をzip圧縮すると69kbyte程になるので 最初の設計の指針としてjarの肥大化は30〜50kbyteは考えておく方が安全だ まぁ最初からメガアプリ専用で100kbyteの壁を考えないなら微々たる問題かもしれんがね iFDとかTree!Explorer VPとかみたいなファイラーみたいなアプリを作りたいのかね?
>>884 ファイルとフォルダがたーくさんあって、
それがすでに7zで固めてあって、
その中の任意のファイルをiアプリから読み込みたいだけです。
ないならないでいいんだよ。作るから。
PC上で7zからzipに変換しておけば済む話じゃね?
受話器のマイクの音声に反応するとか、記録するような処理って 最新のiアプリの仕様でも出来ないんですか?
それが出来たら電話代稼げなくなるから無理
>>886 そういうのをファイラーっていうような気がするんだが……俺の勘違いかな?
まぁあくまでトレードオフの話だから
趣味で自分がやるってのを止めるわけではないよ
LZMAデコーダーはそのまま使えそうだから頑張って7zファイルを処理するコード書いてみると良いよ
実際DoJaのzip処理にも内部の日本語ファイル名が展開できるかどうかは機種依存とかパスワード付きzipは展開できないとか
拘りだすと汎用なzip展開処理としては問題がある点もあるからね
独自コードでメモリ上でzipファイルにパッチ当てでもやってるのか無理矢理それらを処理するiFDみたいなiアプリだってあるし
>>887 だなぁ
iアプリ上で7zを処理する仕組むを組むよりもPC上にある全7zファイルをzipファイルに変換してしまう処理を組む方が多分ラクだし早いな
まぁ俺が元々携帯でのjavaよりもPC上でのCやC++の方が得意だというのも有るんだろうけど
7zが全部ソリッド書庫だというなら中にあるファイルの種類によっては携帯のjavaの方を組む選択にするかも知れんけど
ベタ画像の差分モノ(もうこの時点で種類が極端に限られるけど)なら7z→zip処理でサイズが膨れ上がりすぎるんで
javaの方でどうにかする選択肢になるかも知れんな
まぁその場合でもサイズが大きすぎて携帯のヒープでは前方からのスライドショー程度しか出来なくなりそうではあるが
速度を度外視するならSDをテンポラリにすればなんとかなるか?
携帯じゃあまりテンポラリディレクトリって概念は使われないがSD-BINDがあるなら出来なくはないか
どっちにしても程度の問題かなbmp+7zをjpg+zipに変換するプログラムを組むって選択肢も有るし
>>888 905iの音声認識はマイクに喋った言葉を音じゃなく文字として拾うものなので
(「明日」とマイクに喋ったら"あした"という文字列を取得できる)
音として記録するのは今の所無理だね
自分が喋った生音じゃなくてもよければ音声認識と音声合成を使って無理矢理処理する方法もなくはないけどあんま現実的ではない
892 :
デフォルトの名無しさん :2007/12/15(土) 21:41:00
iアプリは作り方が悪いとリソースが開放されずに残ったりしますか? 自作のiアプリをテストしてたら、メールを作成する時に「メモリ不足です」と出ます。 電源OFF,ONで直ります。
>>892 iアプリの問題というよりも端末そのもののバグって気がするが>それ
実行中にオブジェクトのリソースが残ることがあるかって点ではdispose()があるものは
dispose()で明示的なオブジェクトの開放を行わないと駄目だが
iアプリそのものが終了後にネイティブリソースが開放されずに残るってのは端末のバグだと言えると思う
894 :
デフォルトの名無しさん :2007/12/15(土) 22:14:52
>>893 機種はF905です。
PCと違って行儀悪くても終了したら全部開放される事にはなってるんですね。
バグだとしたら致命的だなぁ
マルチタスク?とやらでアプリ使用中ってことはないよね? アプリ終了してもリソース開放されないならバグだな
>>895 いやいや待てよマルチタスクでiアプリ実行中にメールを起動したとしようや
その状態でメール側にしろiアプリ側にしろメモリ不足なんて干渉が起きる時点で明らかに設計上のバグだろ
これがアクセスできないリソースへのアクセスを止めるワーニングメッセージならともかくだが
例えばiアプリがSDを使用してる場合はマルチタスクでネイティブのSDアクセス部分が動かないようにワーニングを出すとかならまだ理解できる
897 :
デフォルトの名無しさん :2007/12/16(日) 01:36:08
一瞬だけ「メモリ不足です」って出るんです。 で、F905の板とか関連を見てみたら、他でも返信メールを打とうとしても、 画面が切り替わらないという症状があるらしい。 多分、一瞬だけ「メモリ不足です」が出てると思う。 やっぱりバグかな。
仕様かもしれん
まぁFだしなぁ PとSH以外でまともな携帯求めるほうが間違ってるといいたいw
N900iでも、アプリとメールとiモードを同時に使うと「メモリ不足です」でメールが閉じられたりするよ。 Javaヒープとメールやiモードのヒープが、共有されているだけじゃね。
N、D、Fは何かしら問題が起きる事が多い気がするから嫌い。 みんなPとSHを使えばいいのに。
SHはソフトバンク機で尋常じゃない機種依存持ってるからやだ
最近の端末は3Dの為に専用のハードウェア積んでるから それによる機種依存もあるんだよねー
Windowsは何かしら問題が起きる事が多い気がするから嫌い。 みんなMacを使えばいいのに。
Mac使わなきゃならないならこの仕事辞めるわ('A`)
関西だとやっぱMacDoって言うの?
java 初心者だけど、聞いていいですか? 構造体をリストに保持したいんだけど、javaだと、どうやって実現します? vectorとか?
ArrayList<HogeClass>
905で縦横判別テストと思って try{ switch(PhoneSystem.getAttribute(PhoneSystem2.DEV_DISPLAY_STYLE)){ ほげ } catch (UnsupportedOperationException e) { } とかしてみたんですけどエミュレーター上は問題なく動いて実機だと 実行時例外が発生して UnsupportedOperationException がcatchできないみたいなんですけどなにか勘違いしてますかね? ちなみにP905です
iアプリコンテンツ開発ガイド for DoJa-5.x 各機種オプションAPI・拡張API実装状況
>>909 他のとこの UnsupportedOperationException エラーでした
ソースは大丈夫そう
...Canvas2部分があやしい模様
エミュレーターだとエラーでないんだよなorz
Canvas2なんて使えるほうが珍しいってか使える機種あったっけ?
>>910 の資料ちゃんと読んだほうがいいぞ
公式資料のくせにきちんとした表になっててわかりやすいし
>>912 Canvas2は5.1以降の拡張APIだから公開されてる実装状況の資料にはまだ載ってないよ
多分だけどF905i専用のAPIじゃないの?
>>908 > ArrayList<HogeClass>
ありがとうございます。
構造体の代わりにクラスを作ってArrayListに格納ってことですか。
ところで、クラスってインスタンス一個作る毎に、どのくらいメモリを消費するんでしょう?
数千単位だと、結構無視できない量になる? それともCの構造体程度?
>>913 F905専用かもしれませんね
APIで簡単に回転させようと思ってたんですが
P905でも使える他のクラスあるのかなぁ
ちなみにP905の横オープンですが
PhoneSystem.getAttribute(PhoneSystem2.DEV_DISPLAY_STYLE)
してみた所
ATTR_DISPLAY_STYLE_REVERSE
となぜか実機はREVERSEの値返してきました
ATTR_DISPLAY_STYLE_HORIZONTAL_RIGHT
あたりかと思ってたのに回転関係は結構機種依存度高そう
>>914 iアプリに関する話?Java一般の話?
実装依存だから何とも言えない。
たいていはCの構造体と同じくらい
>>915 画面そのものとキー配置とディスプレイ位置の関係上はリバース位置になるんじゃない?
実際横に開いて縦に使う事だってできるんだし
あと904iまでは画面回転させるなら表示する内容を一回全部Canvasと同じサイズのImageに書いて
(90度,270度の場合には縦横の解像度を入れ替えてImageを作る)
Canvasへ描画する際にGraphics.setFlipMode()で指定した回転状況でImageを表示するって感じになる
もちろん全部の描画処理をラップして画面回転させながら描いてもいいけど
文字列の描画とかの手間を考えるとImageに一回描いてGraphics.setFlipMode()してCanvasへ表示がベストだと思う
P905iって、ADFでDrawAreaを横長(854x480とか)にすると、最初から横倒し表示になるよね。 このパターンだとHORIZONTAL_RIGHTになってたりするのかな?
>>908 ArrayListってiアプリ(というかJAVA ME)で
使えるようになったのか?
使えるわけねーだろw
F905iだけどcanvas2使うと実機で落ちる 例外も取れん わけわからんから 寝て起きて直ってたらいいなー
ハ_ハ ('(゚∀゚∩ なおるよ! ヽ 〈 ヽヽ_) カレーも一晩置いた方がうまいじゃん。
プログラムは一晩置いても直らない
自分の頭は一晩置くと治る場合がある プログラムは確かに直らんが頭が治るとバグを見つけ出せたりして結果的にプログラムも直る場合はあるぞ まぁだからといって毎回そうすればよいという話ではないけどな 煮詰まった時に一歩引いてみるのは手として有効だ
∧ ∧ / ヽ ./ .∧ ニコ / `、 / ∧ ニコ /  ̄ ̄ ̄ ヽ ( ̄ ̄ ̄ ̄ ̄デスマ  ̄ ̄ ̄) / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ .\ 仕事が終わってから /:::::::::: ⌒ ⌒ / ゆっくり逝って^H^Hねむってください。 ヽ:::::::::: /// \__/ /// / ヽ__::::::::::::: \/ / /\\ //\ | \\ // |\
一晩寝かせたけど直らなかった
F905iでcanvas2はサポートされてないようです Fで使えないのになぜ追加したんだ…紛らわしい…
>>926 俺のとこでは、寝かせるときに横にビン入りの水をおいとくとたいてい直ってるよ!
どうもこのビンに秘密があるみたいなんだ。よく効くよ。よかったら安く売ろうか?
>>928 その前に一つ上のレスを読んだ方がいいぞw
jig、ibis以外のフルブラウザがいまいちなんで メガアプリでフルブラウザ作らないか? ダウンソフトでいうIrvineみたいな名作ができたら、 みんなにも有益だと思うんだが。
んじゃ俺ボーカルやるわ
>>757 結局905のDrawAreaはどう対応したら良いんだろう?
できれば 480/2*8nn/2 のパターンで対応したいけど機種毎の挙動がわからん
>>930 scopeを画面最大でニューロ対応みたいな感じにしてくれ
デフォルトの伝言メモが20秒と短いのですがiアプリでもっと長い留守録アプリを作ることは 可能ですか?
無理
937 :
デフォルトの名無しさん :2007/12/21(金) 19:12:20
Dojaプラグイン+eclipseの[設定]内の 「DojaX.X Environment」 のなかにサウンド設定がありますが、 eclipseで開発すればmldやら3g2やら再生すると音が出るんでしょうか?
938 :
937 :2007/12/21(金) 21:53:12
自己解決しました お騒がせしました
>>932 ユーザーが任意のサイズを落とせるようにするなら
480x864(F,D,SO)
480x854(N,P,SH)
480x734(SO)
480x650(N)
480x640(F,D,P,SH)
と各1/2サイズで良いんじゃないの?要するに10個解像度を準備
エミュレータからローカルホストに通信したいときはどう設定すればいいですか? ADFアドレスが127.0.0.1では不正だと言われました
IPアドレスで指定することはできない
上にも書いてあるけど905でSDHCが使えるようになって SDのファイル名8.3形式以外のロングファイルネームは対応してるんでしょうか? 実機がないので試せないorz
単独サイトのサーバでも DLサーバにVirtualHost設定しとかないとJar抜かれる。 気をつけて。
>>945 どういう流れか知らないが、
普通にVirtualHostを設定しただけじゃPCから見えると思うぞ
Display.setCurrent()で表示するキャンバスクラス切り替えると 画面が一瞬パチってなるんだけど、それを起こらなくすることって出来ますかね。
>>946 PCから見えなくても
IPでのアクセスが可能になってると
抜ける。
で、具体的な抜き方と、防衛方法はなんですか?
抜き方も何もダウンロードするリンクが貼ってあるページをPCで見たら Jarの位置がわかる。そこにアクセスすればJarが落とせる。 なので携帯のIP範囲外だったら表示しないようにする。 サーバで設定するかページごとにチェックするかはお好みで。
>>947 無理
setBackgroundColorで誤魔化せるけど
>>950 IPアドレス制限するくらいは誰でもやってると思うんだけど
>>945 >>948 は、「jarをIPに対応してない別サーバに置かなきゃjar抜かれるよ」って言ってるように読める。
俺はどっちかと言うと抜きたい方だから詳しく書かないで静観したい。
ゲーム等で使用する画像をスクラッチパッドに書き込んで使用する場合の ユーティリティを作成しようと思っていますが、 なかなか良案が思かず、みなさんのご意見を伺いたいと思います。 ・HTTP通信でリソース取得を行い、SCPに書き込みとしたい(SDは使用しません) ・独自メソッドでファイル名を引数に渡せばbyte[]で返してくれる様にしたい ※上記ができればImage,MediaSound,JarInflater等を 各オブジェクトで返してくれるメソッドも作成する 現在検討している内容は下記ですが、 この後、どうやってファイル名でデータを取得するかが検討つかずボツになりそうです。 @ファイル名を記載したテキストリストからBufferdReaderで1行読み込んでURLと繋げる A通信で取得時にLengthを取得してファイル名、書き込み位置、ファイルサイズを記憶 以後繰り返し。 上記と全く違う方法でも構いません。 CPや一般のアプリ作者様の管理方法等、情報がありましたら教えてください。 よろしくお願いします。
>>956 iモードはほとんど関係ない一般的な内容な気もするが…
とりあえずその段階で悩むようなら、まず考えた案で実装してみることをお勧めする。
そうすれば、何が必要かなんて一発でわかる。
>>951 無理か〜。
タイミングによっては出ないんだけどね〜。
ごまかすってのは白か黒で塗りつぶすみたいな?
なんにせよありがとう。
そもそもCanvasを切り替えるってやらなくないか? 危険ばっかりだし 端末によってはCanvas破棄してもうまく開放してくれなかったりするし。特に古いN
panelとcanvasを切り替えるのはやる
あのうプログラミングめんどおくさいんですけど どうすればいいですかあ?
いきをするのもめんどうだ
950のダウンロードページを携帯のIP以外を弾くってやり方だけでは危険? jamの内容見られたら終わりですよね
素人はhtaccessで弾いとけよ。
jar落とせなくてもjam落とされたら 別のところにjamをあげられて勝手にアプリダウンロード出来てしまうよね
>>964 今のところhtaccessのみでやってるけど心配になってきた
>>965 でも逆コンパイルされる心配はないですよね?
ProGuardなりで難読化してるからそれは心配ないですけど 自分のサイトのアプリが他所で勝手に再配布されるのを防ぎたいのです
まとめてみた。
端末によってはアプリ情報でjamのURLが見られるって書き込みがあったような。。。
コンテンツへのアクセス許可をiモード限定とすることで、
html、jam、jarの直接的な閲覧が制限され、
各URLの秘匿およびアプリの逆コンパイルを阻止できる。
▽ダウンロード用htmlへのアクセスをiモード限定にする
・jamのURLを秘匿するため
▽jamへのアクセスをiモード限定にする
・PackageURLを秘匿するため
▽jarへのアクセスをiモード限定にする
・逆コンパイルを阻止するため
iモードのIPアドレスはこちら
ttp://www.nttdocomo.co.jp/service/imode/make/content/ip/
971 :
デフォルトの名無しさん :2007/12/27(木) 16:44:09
JAMとちがうドメインのjarをDLできる仕様なのが素人の俺には理解できない
>>970 トレースがONだと見れる端末は有るよ>jarアドレス
iモードアクセス履歴検索サービスを使えば端末によらず見れるでしょ。
test
>>974 そんなサービスが!!
ネットランキング用のcgiにGETでアクセスするようなアプリだと
イタズラし放題なのか。。。
>>963 ここまでの流れ、静観しようかと思ったけどやっぱり書く。
接続元IPアドレス、いわゆるリモートホストで弾くだけでは不十分。
アプリ置くサーバにはバーチャルホスト使えって書いた人を笑ってた人がいたけど、
バーチャルホストにするのは有効だと思う。
理由はこのスレだったか前スレだったかに書いてた人がいたね。
iモードでjamのアドレス直打ちすっと内容丸見えだからな jamの在りかがバレたらアウト ダウンロードページを携帯でしかアクセスできないようにすればいい htmlのソースが見える携帯があるとすればダメだが
>>976 ウェブセキュリティの定石ですな。
アドレスバーを隠してセキュアにしようとするのは駄目。
通信内容は見られる前提でシステム組んでおかないと。
iモードアクセス履歴検索サービスなんてもう2年近く前からあるのに。
2年前ってわりと最近だなw
勝手アプリは抜かれるの覚悟で公開しないと
982 :
977 :2007/12/28(金) 12:27:55
>>978 違うんだってば。
リモートホスト使って携帯からしか見られないようにしてあっても、
HTMLのソースもjamもjarも「ぶっこ抜く」方法があるんだよ。
対策はいくつか考えられるけど、詳細を言わずに対策だけアドバイスするって意味で、
バーチャルホスト使えっていうのはうまい言い方だと思う。
元のレスはどこだったかな…。
>>982 参考までに抜ける公式サイトURL教えてくれ。
>>983 公式サイトに試したことないので、わからない。
でも、さすがに公式のは対策してるんじゃないのかな。
その方法がバーチャルホストかどうかは別にして。
元のレスが見つからない…。
前スレのログ持ってる人がいたら確認してもらえないかな。
前スレなら1001まで持ってるが該当記事ではリファラorIPだけでブロックしてるところは抜くことができるというもの ホストで規制してたら駄目
>>983 おー、やっぱ前スレでしたか。ありがとうございます。
ホストで規制ってのは、端末側じゃなくてサーバ側の(言い換えると、リクエストヘッダのHost)だよね。
てことで、すまないけど、詳細知りたい人は前スレを探してください。
前スレ見てきた。大体把握した。 でも対策として、バーチャルホストを使えば有効な理由が分らない。 詳細きぼん。
988 :
987 :2007/12/28(金) 13:26:39
あー、986見てわかった。HTTPヘッダとsetRequestPropertyがキモなのか。さんくす。
989 :
987 :2007/12/28(金) 13:27:39
次スレたててくる
>>987 ごめん、書き方不正確だった。
ネームベースのバーチャルホストじゃないと意味ない。
IPアドレスベースのバーチャルホストを想定してた人がいたらごめん。
埋め