iモード携帯電話用Java(iアプリ) Part18
よし、俺だけは
>>948 の味方だ!
精神的な支えになってあげるよ。
実行してみた
綺麗だなぁと思った
>>954 何ともないんですか..
自分の端末で実行すると、円の内側の上下に一本ずつ濃い横線が入って、alphaが8以下だとRとBに関係なく暗い緑になるものですから
Gだけは反映されます
>>955 StarアプリとしてF-01Aで実行してみたけどエミュ通り。
特に線が入ったり色が変わったりは無かったです。
ディスプレイの色深度が絡んでいるのかも。
ImageStore.addEntry()してみてくれませんか?
P905i/P906iを持ってる人が周りにいないので教えてください。
P90xiで横開きにするとアプリはどのような向きで表示されるのでしょうか。
「#」をキーが付いてる本体側、「矢印」が画面側だとして、
縦開き 横開き1 横開き2 横開き3
↑ #↓ #↑ #→
#
通常の携帯が「縦開き」の状態だとします。P90xiで横開きにしたとき、
画面部分の物理的な方向を考えると「横開き1」になる気がします。
端末側の処理で上手く「横開き2」になるのでしょうか。
それとも「横開き3」のように横向きにされてしまうのでしょうか。
横開き2
横向き対応なら横開き3
回答ありがとうございます。
期待した動作のようで安心しました。
1秒間のフレーム数を設定しているのですが、期待通りの値になりません。
秒間30フレームにしたいのですが、どうすればよいでしょうか。
現在はこうなってます
//表示する処理
fps++;
if(dtime + 1000 <= System.currentTimeMillis()) {
dfps = fps;
fps = 0;
dtime = System.currentTimeMillis();
}
g.drawString("FPS:"+dfps,0,238);
//スリープ処理
int INTERVAL = 1000 / 30;
long wait = INTERVAL - (System.currentTimeMillis() - lastTime);
if (wait > 0) {
try {
Thread.sleep(wait);
} catch(Exception e) {
}
}
lastTime = System.currentTimeMillis();
30前後の値を期待しているのですが、21〜22しかなりません。
これ以外に余分な処理は入っていません。
よろしくお願いします
そのウエイト外して30超えないならそもそも無理なんじゃね?
>>961 ウェイト外したら130位出ました。
もしかしてFPSのカウント方法間違ってますか?
System.currentTimeMillis()の精度が糞だから
>>963 な、なんだってー
じゃあ、どうすれば・・・
嘘教えるなよ。
currentTimeMillisの精度は、だいぶ前から全機種1msなので問題ない
問題なのは、sleepを使ってること。
sleepはそもそも「指定した時間休む」機能ではない。
「指定した時間”以上”休む」機能なので、目的にあっていない。
無限ループをぶんまわすようにすれば安定する
書き方に不備があった。
無現ループをぶんまわす。ではなく
while(System.currentTimemillis() を呼び出し、経過しているかチェック
{
; // 何もしない。
}
Thread.sleep()じゃなくてObject#wait()ならどうだろ?
ナノ秒単位まで指定できるあたりThread.sleep()より
精度が高いことが期待できそうな
969 :
デブ:2009/02/03(火) 02:22:18
アフェリの間違いだろ
971 :
デフォルトの名無しさん:2009/02/03(火) 11:55:49
>>966 半年ほど前までは、それに似たような手法を取ってたけど、
902以降対応アプリでクライアントのチェックによると、
機種毎に差があって止めたよ。
>>971 差があるのは当たり前w
時間経過の際カウンターを
while(true)
{
long nowTime = System.currentTimemillis();
if (nowTime - lastTime)
{
lastTime = nowTime;
break;
}
}
なんていう、徐々に誤差が貯まっていくようなやり方しちゃダメだぞ?
973 :
sage:2009/02/03(火) 18:13:16
900i〜901iの一部の端末(D900iとかN900iとかP901iとか)で
シーン切替の際にインスタンス生成のせいか、
悲しいことに原因が特定できずにお手上げな状態なんだけど
端末がリセット(電源がプチっと切れてまたつく)されるというレアバグ
に遭遇中なんですが、誰か同じ現象あったことある人は?
解決策が見つからない・・
いつ買った端末?
初期ロットのバグじゃないの
アプリ側は悪くない
3桁初期FOMAは高負荷で落ちる
ですよね。
プログラム側でそんなウィルスまがいなこと出来るわけないと思ってたし。
ただ自分のところの携帯(D900i、N900i、P901i)でも
あのP○Wのデバッグでも発生してるから、俺悪くないでは済まないので困る所。
ちなみに905とかでは発生しない。RPGアプリそこそこでかめ。
解放処理は全部確認したから、あとは自分的にはやりたくないことしか
試せることはない。進展あったらここに残しておきます。
誰か些細な情報でも近いの知ってる人いたら情報提供お願い。もはや藁にもすがる。
まずは objectの再利用するようにリファクタリングかなー
WDTでも積んでて、重いと落ちるのかな。
カブった。リロードしろ > 自分
5年アプリ開発してて初めてですよ。こんなの
これが後輩とかの祭りなら、ウッキウキなんだろうけれどね
高負荷ってくそ重いってことでOKかしら?
人前に出すものなんでそんなのはあり得ないが、
それでスレ立てて裏読みしてる部分が気になったんで
裏読みやめてみることにしてみる。
リファクタリングは終わった。変化無し。相変わらずプチっと切れる。もうすぐオレも
あくまで動きますよってだけって900とか901は無視してるなー
割合も圧倒的に低いし下を基準に考えたらキリがないから割り切ってる
基本的に携帯って安定はしててもコードの質が低いから
たぶんVMタスクがCPU占有しだすとハングアップ検出プログラムが
動かなくなってあぼんするんだと思う。優先度が高すぎて。
毎回同じところで落ちるなら、そこの処理に何か問題があるのかもね。
ちょっとした進展あった。
フェード用のクラスの描画部分を空にしたら、プッツンいかなくなった。
かなり最初の段階で分かってたことなんだが、必ず1シナリオ(RPGなんで)終わって
タイトルに行った時に切れてたから、とりあえずタイトルにSystem.out.printlnを詰め込んで
5フレ目にあぼんしてるのと、その瞬間はフェードだっていうことまでは分かっていたんだが、
タイトルのフェード削っても一時しのぎにしかならなくて、シナリオ入る時にはまた落ちるから、
インスタンスの生成しすぎなのか?とかちゃんとぬるぽ入れてないのがあるかとか色々見てたんだが。。。
リファクタまでして、画像読み込みが分かれてたのを共用化して削除しないようにしてメモリ分断まで避けたりしたのにw
もうやってられんと思ってとった行動が功を奏しました。
Graphics3Dのやつがなんらかの悪さをしてるっぽいです。
これでなんとかなりそうな気がします。
よく分からんバグがでた時頑張って原因見つけて完全に治せたときって、すごいM見たいな言い方だけど気持ち良いよね。
でもいい気になっていじってたらまた同じバグが出たりしたらマジ発狂しそうになる・・・。
進展ありました。
下記でメモリ節約優先の為、キャストするだけにしてた部分をちゃんとするようにしたら
端末リセットによるぷっつん落ちは無くなりました(同じような場所でぬるぽで落ちますがw
あとは色々小細工すれば何とかなると思います。
お付き合いいただいた方々有難うございます。いくばくか心の安らぎを頂きました。
Graphics3D g3 = ( Graphics3D ) g; // こっちの方がメモリ消費が少ない(でもこんなレアバグ引き起こした憎いやつ)
↓
Graphics3D g3 = ( Graphics3D )g.copy();
もう解決したようだけど、描画とスクラッチパッド連続アクセスの間隔を多めに(80msくらい)とると落ちにくいと思う
983が原因ならプライオリティ下げるといいかも
989 :
デフォルトの名無しさん:2009/02/04(水) 15:56:11
ここの板で、iアプリのjavaのプログラムの質問してもいいですか?
990 :
デフォルトの名無しさん:2009/02/04(水) 16:37:54
すいません989です。D4Dデータに詳しい人いらしゃいますか?
組みたい内容はこれです。
通常は1フレームから20フレームのループアニメーションで、
*ボタンを押すと21フレームから40フレームまでのループアニメーションにジャンプ
#ボタンを押すと41フレームから60フレームまでのループアニメーションにジャンプ
と言う内容です。
自分はH3TデータをD4Dにコンバートしてます。
どなたか詳しい方がいらっしゃいましたら、
よろしくお願いします。
マスコットカプセルの板にも同じ質問をしています。失礼しました。
端末リセットというレアバグに関して
結構でかめなアプリで(体験版だからと無理して連携アプリを一つにまとめたり)
Graphics3Dをキャスト変換だけで取得したりすると、あぼんします。
多分いろいろな現象が絡んだ結果のレアバグだと思います。
昨日、同じような場所でぬるぽで落ちると報告したのは結局色々やりすぎて
別のことでバグが発生しただけのようでした。
リファクタリングやら、メモリ分断気にしての画像スタティック共用化やら
ガベージコレクタしやすいようにnull入れるやら、インスタンス作り直しすぎなの?なんて
そんなことは一切関係ありませんでした。上記全てをやる前に巻き戻して
Graphics3D g3 = ( Graphics3D )g.copy(); で解決でした。
別バグがこれまた怪奇的だったため、今日一日フェードじゃないワイプ処理にしたりして
結局うまくいかないからソース巻き戻して報告時間かかりました。(別バグ報告も直しながらだったんで)
結構null入れなくても、desposeしてないのとかもあったりしてもw、それすら関係ありませんでした(無くは無いだろうけど)
iアプリはちゃんと動きます。ガベージコレクタさん優秀です。
>>990 990さんは何が分からないの?プログラム部分?
そんなに難しいことじゃなかった気がするんだけど。
d4dだからって何かそんなにやること違ったっけ?
// Graphics3D オブジェクトのアクションテーブルを設定
fig.setAction( act, 0 );
// アニメーションキーフレーム時間の設定
frame = frame < act.getMaxFrame( 0 ) ? frame + act.getMaxFrame( 0 )/ 250 : 0;
fig.setTime( frame );
これマスコットカプセル作ってる会社のサンプルの一部だけど、
やりたいことってfig.setTime( 〜〜 );じゃないの
まあこのサンプル小ざかしいif文使っててムカつくけど。
993 :
デフォルトの名無しさん:2009/02/05(木) 02:07:02
>>991 もう文章も書けない大ばか者ですいません;;
javaやプログラムを最近始めたばかりで、専門書など読んでるんですが、
この辺まで来ると、オーバーヒートしそうです;;
今困っているのは、プログラムです。
アニメーションをキー操作で指定のフレームごとに飛ばすというものです。
現段階では、アニメーションの再生まで分かっています。
H3TExporterでH3Tデータに変換したD4Dデータでは、
ActionTable操作できないとあったので、
ActionTable以外に何かあるのかと調べました。
group.setTime(frame)で、実装可能とありました。
これをどうやればいいのか分からない状態です。
浅い知識で分かれというのは無理ですが、なんとかしたいので
ヒントなどあればよろしくお願いします。
そりゃ最初ッから随分きついことさせられてるね。
自分で、int motionCount;みたいなものを用意しておいて
毎フレ motionCount += 1;
if( 20 < motionCount ){
motionCount = 0;
}
描画時 fig.setTime( motionCount * 65536 );
act.getMaxFrame( 0 )とかで取得する場合、値は*65536されてるはず。
ここまで分かればできるでしょ。もう出来てるだろうけど。
頑張って。
もしこれで出来たなら、iモード携帯電話用Java(iアプリ) Part19
作って!俺分からん!
995 :
デフォルトの名無しさん:2009/02/05(木) 17:25:59
>>994さん
できましたー!!!!ありがとうございます!!!!
そして協力してくださった方ありがとうございます!!!!
2chすげー!!まじすげー!!本当にギガント感謝!!mm
>>もしこれで出来たなら、iモード携帯電話用Java(iアプリ) Part19
作って!
すいません2ch初心者なので分かる方お願いしますmm
立てます。しばらくここに書かないでください。
Sundome(tm)
1000 :
デフォルトの名無しさん:2009/02/05(木) 18:40:35
1000
1001 :
1001:
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。