Javaアプレットのゲームの限界は! at GAMEDEV
[2ch|▼Menu]
[前50を表示]
200:◆sA5ZfsnM
02/08/08 23:03
200

201:名前は開発中のものです。
02/11/03 01:58
Javaも各OSにプリインストールっていうことにしてほしい。
SUNも変な意地張らないでさ。

202:201
02/11/03 01:59
そうすれば、もう少し使えるのに…。

203:あぼーん
あぼーん
あぼーん

204:名前は開発中のものです。
02/11/03 21:19
Java1.4で全画面アプリとか作れるようになったけど、
結局はやってないのかな。

205:名前は開発中のものです。
02/11/09 23:32
もうすぐCPUが60GHzくらいになるから気にならなくなるよ

206:名前は開発中のものです。
02/11/10 12:51
Javaが遅く見えるのは起動時間とGUIのせいなので
現状でもそんなに使えないわけではないよ。


207:名前は開発中のものです。
02/11/10 14:15
起動時間とGUIが遅いって致命的臭いんですが

208:名前は開発中のものです。
02/11/10 21:47
ゲームにとっては致命的とはいえないでしょ。
1.4からはゲームに使えるような機能の拡張もあったし。

とはいえ、ランタイムがほとんどのOSで標準ではないという、こっちは致命的っぽい問題があるんだが…。

209:名前は開発中のものです。
02/11/11 20:51
起動時間 : lazyなクラスロードを行う事で、ごまかす事は十分可能。
GUI : SWTという早くて恰好良い(Java臭くない)GUIのツールキットがある。アルファブレンド使えるし。
ランタイム : 配布パッケージに含めてしまう。10MBくらいしかないので、大作だったら誤差の範囲内。

・・・負け惜しみ臭いモナー

210:名前は開発中のものです。
02/11/11 21:18
>>209
まぁ、アプレットだとそうだよなー
Javaアプレットゲームなんて昔のショックウェーブに次いでショボゲーの代名詞だし。
というかちっともスタンドアロンのほうが立ち上がらないほうが問題?

211:名前は開発中のものです。
02/11/12 18:39
>>210
Java好きだけど、スタンドアロンが立ち上がる(ex.最新JREのPC普及率が5割を突破する)のは
もうあり得ないだろう。Javaの生みの親がSUNじゃなくてIBMだったら・・・と思うことしきり。
それに、生産性が高くてスタンドアロンのゲームが作れる言語と言えば、
Javaはいまやその代表の座をC#に譲っているからね。

生産性が高くてスタンドアロンでマルチプラットフォーム、という限定をつけたら
まだJavaがトップを突っ走っているとは思うけど、ゲームってマルチプラットフォームで
ある必要性が基本的に存在しない分野だからなぁ。

212:名前は開発中のものです。
02/11/12 19:19
>Javaはいまやその代表の座をC#に譲っているからね。
C# ってゲームにおいては Java の座を継いだのか…
それはそれで哀れだなぁ…
代表ゲームが Robocode と Terrarium だからまぁ、
どっちもどっちなんだけど。

213:名前は開発中のものです。
02/11/13 00:20
>>212
いや、C#を褒めるつもりで書いたんだけど・・・
でもC#はJavaの座を継承した、というのは誹謗中傷に近い発言だったかも。

C#って、Javaよりも生産性が高く、しかもWindowsべったりだから高速で、
セキュリティには無関心だけどパフォーマンスとUIには力を入れるMSが
オーナーだから、ゲームに凄く向いていると思うのですよ。

といいつつ僕はJavaでへこへこ書いてるんだけどね。

214:名前は開発中のものです。
02/11/13 01:45
というか、リアルタイムゲームで実際GCってどれくらい問題になるんだろう?
大きめなやつを書いたことが無いから分からん。


215:名前は開発中のものです。
02/11/13 09:11
JavaはCOBOLを継承したからねえ。

>>214
急に描画が止まったり、フレームレートが揺らいで
ユーザーにとって不快、という問題につきますな。

GCなくてもそうなるヘボいプログラムばかりなので、
ちょっとぐらいよさそうな気がしますが(汗)

C#+DX9でどれくらい行けるかが注目してます。

Javaアプレット?
何年たってもあのままじゃあ誰も使わなくなるって。

216:名前は開発中のものです。
02/11/13 12:14 d9pe3DQB
>>214
何か大きな変更を加えたり、VMの種類やバージョンが変わるたびに
GCで引っかかるポイントが変わるのでブチ切れそうになります。
確実な回避方法がないだけにいっそう。

217:名前は開発中のものです。
02/11/13 12:19
ふむ。
スムーズな動きが必須のゲーム(格闘ゲームやシューティングとか)は
作りにくいって事かな。

ところでC#もGCあるよね?

218:名前は開発中のものです。
02/11/13 17:37
GC ってオブジェクト使いまわしとかじゃ回避できないモンなの?

219:あぼーん
あぼーん
あぼーん

220:名前は開発中のものです。
02/11/13 21:54
>>218
ライブラリが使いしてたら自分が使いまわしても意味ないし…。


221:あぼーん
あぼーん
あぼーん

222:名前は開発中のものです。
02/11/14 07:51
>>220
なるほど。

223:名前は開発中のものです。
02/11/14 08:08
>>220
それだと API 内部の挙動がバージョン毎に
違うのが問題で、GC だけどうにかすれば良いってモンでも無いような。

そーゆー意味では C# は GC があっても Java よりは相当楽だろうね。

224:名前は開発中のものです。
02/11/14 12:11
>そーゆー意味では C# は GC があっても Java よりは相当楽だろうね
C#はバージョンごとに共同が違ったりしないの?

225:名前は開発中のものです。
02/11/14 12:15 n6HwOeB2
C#については優秀なDirectXチームがついてるから
それなりにリアルタイムゲーム方面も考慮してくれるんじゃないかと。
俺は人柱になる気はないけどね。

226:名前は開発中のものです。
02/11/14 13:05
>>215
> 何年たってもあのまま
な責任の10%くらいはMicrosoftにあるかと。
90%くらいはSunの自爆だが

227:あぼーん
あぼーん
あぼーん

228:名前は開発中のものです。
02/11/14 19:15
だから、ageないでくれぇ

229:名前は開発中のものです。
02/11/14 20:58
> C#はバージョンごとに共同が違ったりしないの?

まだバージョンが少ない(藁
M$が事実上独占してるしなあ・・・

Server版の.NETランタイムはGCの挙動がチト違うそうだ。
違いをたしかめたわけじゃないけど。

230:あぼーん
あぼーん
あぼーん

231:名前は開発中のものです。
02/11/15 12:36
>>229
これからバージョンが増えてってWin32 APIの悪夢が
再来することは目に見えてるだろ
JavaだってSunが事実上独占してるけど(ry

232:あぼーん
あぼーん
あぼーん

233:名前は開発中のものです。
02/11/15 21:29
事実上SunとIBMのVMしか使われてないからなあ・・・

234:あぼーん
あぼーん
あぼーん

235:名前は開発中のものです。
02/11/15 22:02 19ikqMY5
JDK1.4 でつくったアプレットが古いJREだと動きません。
だれが助けてください。

236:あぼーん
あぼーん
あぼーん

237:名前は開発中のものです。
02/11/16 01:28
>>235
複数の原因が考えられるので、答えるのが面倒くさい。

238:あぼーん
あぼーん
あぼーん

239:名前は開発中のものです。
02/11/16 04:22
ageた奴はこのスレに対する破壊行為者として認定。

240:あぼーん
あぼーん
あぼーん

241:age
02/11/18 03:43 hCRk4P1V
>>74
私も同じ問題で困っていました。おかげで、アプレットがFlashに置き換えを
迫られてしまい、非常に悲しい思いをしていました。
Thinkpad Windows2000
○MicrosoftVM 5.0
○Sun 1.3.1_05
×Sun 1.4.0_02
○Sun 1.4.1
以上の環境の×がついている環境でふんづまりが起きています。
バージョンによってMemoryImageSourceの使用方法が悪いと固まるようです。
以上の環境で問題なく動作する変更方法を見つけましたので報告しておきます。
@MemoryImageSourceをnewするときに
 DirectColorModel(24, 0xff0000, 65280, 255)を用いる。
AMemoryImageSource#newPixcelsメソッドを使う。
Open-Programingの例に修正方法を書きます。


242:age
02/11/18 03:44 hCRk4P1V
source002のRender.java
static final public void EndScene(Applet applet,Graphics offscreen)
{
offscreen.drawImage(applet.createImage(new MemoryImageSource(BUFFERW,BUFFERH,pbuf,0,BUFFERW)),0,0,null);
}

static boolean initf=false;
static MemoryImageSource mis;
static Image img;
static final public void EndScene(Applet applet,Graphics offscreen)
{
if(initf==false){
mis=new MemoryImageSource(BUFFERW,BUFFERH,new DirectColorModel(24, 0xff0000, 65280, 255),pbuf,0,BUFFERW);
img=applet.createImage(mis);
mis.setAnimated(true);
mis.setFullBufferUpdates(true);
initf=true;
}
mis.newPixels();
offscreen.drawImage(img,0,0,null);
}

243:あぼーん
あぼーん
あぼーん

244:名前は開発中のものです。
02/11/18 05:31
>>241
それってディスプレイの設定が24bitカラーのときっすか?

245:sage
02/11/18 06:07 hCRk4P1V
>>244

いや、内部形式として、24bitカラーとして扱う場合です。
いちお、256色モードのときも試してみました。
MicroSoftだと、ディザ256で、Sunだと、タイリング256で表示されました。
通常のnew MemoryImageSource()だと、32bitカラーで、上位8bitがαチャンネル
として認識されるので固まるときがあるのではないかなぁと思います。


246:名前は開発中のものです。
02/11/18 06:09
あ、名前の欄にsageっ手書いてしまった。
鬱だ氏脳。

247:名前は開発中のものです。
02/11/18 06:21
>>245
>通常のnew MemoryImageSource()だと、
>32bitカラーで、上位8bitがαチャンネルとして認識される
のは知ってるんだけど、
>ので固まるときがある
とどう結びつくのかが良くわからん。詳しい人解説キボンヌ。
Java内部でアルファブレンドしようとするので遅くなるとか?

248:名前は開発中のものです。
02/11/18 06:36
URLリンク(www.gimlay.org)

最後に、パフォーマンス・フォーラムの外では Niels Jorgensen が、
アルファ・チャネル(alpha channel)を使わず、
MemoryImageSource.newPixels()と一緒に
DirectColorModel(new DirectColorModel(32,0x00ff0000,0x0000ff00,0x000000ff))
を使用したところ、デフォルト・カラーモデルを使用する場合に較べてどれほど画像描画が
著しく速くなったかについて説明していました。
そのスレッド( JavaGaming.Org Message Board: 2D Graphics Programming in Java: AWT: Oddities of drawImage() )
には newPixels() の使い方についてのより詳細な内容があります。



249:名前は開発中のものです。
02/11/18 06:39
URLリンク(www.javagaming.org)

Yieeeha!

If anyone else out there has similar problems, try this, after creating the MemoryImageSource:

cm=new DirectColorModel(32,0x00ff0000,0x0000ff00,0x000000ff);
memimgsrc.newPixels(aPixels,cm,0,iW);

Subsequent calls to newPixels does not need the color model (Once set, it appears as if the MemoryImageSource keeps on using it)...

とか書いてあります。よくわからないけど、
32bitのほうが速いのかなぁ???謎。


250:あぼーん
あぼーん
あぼーん

251:名前は開発中のものです。
02/11/18 07:19
>>249
実験できるソースがあるんだったら 24bit と 32bit で
実験して報告してホスィです。あんま変わらん気もするけど。

javagaming.org って Java2D チームの人とか書いてるのか…
しっかし nativeの英語はわからんっす。
辞書に載ってない単語とか、誤字なのか、造語なのか区別つかんし。


252:名前は開発中のものです。
02/11/18 08:45
ベンチとって見ました。
@newPixcelsをひたすら1000回やった場合のスピード
A表示しながらテスト。
B表示しながら、gc。
◆32bit 640x480
MS @5958ms,A66.6fps
131 @6829ms,A?すぐ遅くなる
140 @5458ms,A47.6fps(しばらくすると遅くなる)
141 @5358ms,A43.5fps(しばらくすると遅くなる)
◆24bit 640x480
MS @5748ms,A最大66.6fps
131 @6449ms,A最大62.5fps(しばらくすると遅くなる)
140 @5408ms,A最大41.6fps(しばらくすると遅くなる)
141 @5588ms,A最大50fps(しばらくすると遅くなる)
◆パラメータなし
MS @15642ms,A62.5fps
131 @18206ms,A50.0fps(カクカク)
140 @5428ms,A55.5fps(カクカク)
141 @5428ms,A83.5fps(カクカク)

24bitが速そう。
ウェイトなしでぶん回してしばらくたつと遅くなってしまうので、
sleepをかませないとうまく行かないようだ。
どうして、sleepを入れないといけないのかはわからない。
謎が多いなぁ。


253:名前は開発中のものです。
02/11/18 09:53
>>252
ご苦労様です。

254:名前は開発中のものです。
02/11/18 14:35
謎がある程度、解けてぶん回しても大丈夫になりました。
◆問題点
@MemoryImageSource#newPixcels()等を使うと、ImageObserver#imageUpdate()が呼ばれupdateが呼ばれてしまう。
 createImageでAppletをImageObserverに指定しているので、update()、paint()と呼ばれてしまうので無駄に処理が走る。
Asleep無しでぶん回すとrepaint()を呼ぶrun()とpaint()で同期を取っていないので
 paintでimageアクセス中にrun内でimageに追いついて衝突するため、カクカクしたり、止まったりしていた。
◆解決方法
@は、imageUpdate()をオーバーライドし何も処理しないようにする。
Aは、同期を取るか、getGraphicsメソッドで、Graphicsオブジェクトを取得し直接アプレットに描画する。
 前者は、デッドロックの可能性があるので注意が必要。
 後者は、update,paintを呼ばれたときに、何もしないようにするのがよいが、fpsが遅い場合に、他のウィンドウを
 上に乗せた場合に気になる。


255:あぼーん
あぼーん
あぼーん

256:名前は開発中のものです。
02/11/18 21:46
GUI的なアーキテクチャとゲーム的なアーキテクチャはやっぱり合わないんだなー。
Javaももうちょっとそういう部分を支援すべきかもね。

257:名前は開発中のものです。
02/11/19 01:12
>>256
あわないんだよなぁ。
今流行のSWTなんてGUIに偏りまくってて、ゲームに応用するの辛いんだ。
なんせピクセルの論理演算さえできないという。アルファブレンドはできるのに。

258:名前は開発中のものです。
02/11/19 01:50
色と画像を掛け算しながら描画できないのが痛い・・・

259:あぼーん
あぼーん
あぼーん

260:名前は開発中のものです。
02/11/19 03:44
>>257
Java でゲームすんだったら素直に AWT & Java3D にしとけば…

261:あぼーん
あぼーん
あぼーん

262:名前は開発中のものです。
02/11/19 08:30
お前ら、文句ばっかり言ってないで手を動かせよ
たまにはデモ見て精進汁!
URLリンク(www.komplex.org)

263:名前は開発中のものです。
02/11/19 15:00
>>262
何年前のデモですか… 見飽きたよ。

264:あぼーん
あぼーん
あぼーん

265:名前は開発中のものです。
02/11/19 16:17
というか、画像読み込みまわりが嫌い。スレッドとコールバック前提だし。
まぁ、Webに適合させるためにああなったのは分からないでもないけど、
ゲームにはあわないよなぁ。

それ以外は、GUI部品使わなければいいだけなので、気にならないな。
全画面表示も出来るようになったし。


266:名前は開発中のものです。
02/11/19 16:50
Observerパターンを嬉々として使ってるImageクラスっすか。
正直、あれは俺も余計なお世話だと思う。

267:あぼーん
あぼーん
あぼーん

268:名前は開発中のものです。
02/11/19 23:04
>>265
1.4からImageIOてのが付いて、同期方式になりやした。
確かに余計なお世話多すぎだね。

269:あぼーん
あぼーん
あぼーん

270:名前は開発中のものです。
02/11/25 21:21 MzAMlQtU
アプレットだと、Javaなのに、XMLが使えない。
Flashだと、普通にXML使えるのに、、、。
と、思いチッコイxmlパーサ探したら、kxmlってのがありました。
URLリンク(kxml.enhydra.org)
これで、必要なところだけjarに入れて使えば、問題なくxmlが使えるし、
そんなにでかくないし、日本語化けないし、いい感じ。

271:あぼーん
あぼーん
あぼーん

272:名前は開発中のものです。
03/02/21 09:17 PTBH3u8F
>>6
超亀レスだけど、凄いな・・・
こんなのJavaでも作れるのか・・・
これってOpenGLをつかってるの?
Java3Dなわけないよね、こんなに軽いんだし。

273:名前は開発中のものです。
03/02/21 09:20 uZqnzI2f
URLリンク(homepage3.nifty.com)
( ´_ゝ`)


274:名前は開発中のものです。
03/02/21 09:35 ugkqy7rq
URLリンク(www.agemasukudasai.com)

275:名前は開発中のものです。
03/02/21 09:42 eCjWRLRD
>>272
なにげに舞えやったときよりバージョンアップしてる気が?
路面のレンダリングが問題だね。1行づつコピーしてるのかな?

276:名前は開発中のものです。
03/02/21 13:44 runOoWla
            o.
            /  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ /
           /   このスレは無様に .  /
           /  終了いたしました    /
          / ありがとうございました  /
          /                /
         /    モララーより     /
         / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄/
  ∧_∧  /                /∧_∧
 ( ・∀・) /                /(・∀・ )
 (    )つ               ⊂(    )
 | | |                   | | |
 (__)_)                  (_(__)


277:名前は開発中のものです。
03/05/21 20:23 Xr9rJYyQ
てts

278:名前は開発中のものです。
03/06/20 23:54 DeguR1Lj
MSVMってもう完全に抹殺されたんかいな。

今年に入ってからの動向全然知らずに、一般人向けのアプレットゲーム作ってた。
そういやMSVMで動作確認してないなと思ってMSのサイト行ったらどこにもねえ。
Windows Updateにもねえ。ダウンロードでけへんがな。

とほほ、Flashで作り直すべ。

279:名前は開発中のものです。
03/06/27 14:15 8I/cjQFx
MSJVM は新規ダウンロードできなくなったみたいね。

来年一月だったかでセキュリティホールに対する修正も出来なくなるとかで、
そのうち WindowsUpdate で MSJVM 削除するようになるかもしれないってさ。


280:名前は開発中のものです。
03/07/02 12:15 /h88Q6Sl
Sunのを入れれ。

281:Homa
03/10/02 16:31 MRWcIN/e
URLリンク(kutipatti.fc2web.com)
上記のサイトを作ってみた。
ゲーム製作や、基礎講座等色々あるからドンドン活用してくだされ。

282:名前は開発中のものです。
03/10/05 13:10 nWzLeATY
何もないじゃん。

283:名前は開発中のものです。
03/10/13 18:41 Fi8p2+E6
誰か一緒に先行者ゲームに似たゲーム作らない?
先行者をギコに見立てて、ギコパロの先行者ゲーム版みたいな感じでさ

284:名前は開発中のものです。
03/10/13 18:50 eiZ2Znq9
Javaアプレットで?

285:名前は開発中のものです。
03/10/13 21:03 vAaZAwR4
× 一緒に作らない?
○ 作ってくれ。

286:名前は開発中のものです。
03/10/13 23:20 Fi8p2+E6
アプレットでイインジャナイ?

287:名前は開発中のものです。
03/10/15 02:02 384+STG0
ここはどうよ?
URLリンク(www.din.or.jp)

288:名前は開発中のものです。
03/10/15 08:40 1SM2wGBr
>>287
お、結構すごい。ちゃんと3Dなんだ。。。


289:名前は開発中のものです。
03/10/22 13:14 AqHNgwI1
Java3Dでゲームを作りたいんですが、ひな形を教えてもらえませんか?
メインループとキー入力、描画処理といったところの書き方が、
よく分かりません。お願いします。

290:名前は開発中のものです。
03/10/24 23:56 CUmyDoVD
Java3Dなんか使ったら一般ユーザが実行環境用意できないんじゃ…
ところでこいつの開発を再開して欲しい。
URLリンク(www.geocities.co.jp)

291:名前は開発中のものです。
03/11/25 02:33 bFC0Dkpb
誰か、>>287の最強のデータとか持ってないか?

292:名前は開発中のものです。
03/12/24 23:12 JEiw4c+Q
誰か凄いの紹介してくれよ。

293:名前は開発中のものです。
04/01/16 02:00 IBnrTlSi
かなり重めだけど、
URLリンク(ikebukuro.cool.ne.jp)


294:名前は開発中のものです。
04/01/16 17:03 OpJhtAPE
フライトシミュレータって操作むずいんだよな。

295:名前は開発中のものです。
04/01/17 00:56 /8vojqoK
3Dだから限界って訳ではないけど、
URLリンク(www.benricute.com)
にも3Dのゲームが

296:名前は開発中のものです。
04/01/17 02:21 6ai+veDu
作るならアプレットより
アプリケーションで作った方がいいよ。



297:名前は開発中のものです。
04/01/18 00:05 R2AUtvDl
>>295
ちょっと面白いかも。
ここってオリジナルのゲームなんでしょ?
なのに、フリーで出まわってるゲームも置いてるなんて、なんだかなぁ。

298:JAVA初心者・・・
04/01/19 04:41 7ZOz3AkQ
はじめまして!!
今宝探しゲーム作っているのですがどなたか参考になるソースもってませんか?
目標はFF9のミニゲームだった「ここほれ!チョコボ」です。
どなたかご協力お願いします<(_ _)>

299:名前は開発中のものです。
04/01/19 15:27 snVCA4Sa
>>298
スレ立てといてなんでここで聞いてるんだよ

300:名前は開発中のものです。
04/01/21 00:26 j6QTKwUD
海外のサイトだけど、
URLリンク(www.javagameplay.com)
とか。
あまり面白くはないけど、すげーなと思う。


301:名前は開発中のものです。
04/01/21 02:01 JJmOkv2J
漏れも海外のサイト紹介しちゃうぞ
URLリンク(www.classicgaming.com)

302:名前は開発中のものです。
04/01/21 09:01 j6QTKwUD
紹介されているページを見る限りでは、
グラフィックスに関してはほぼ何でも出来るが、
音まわりの処理が苦しい?

303:名前は開発中のものです。
04/01/22 21:10 sEG1ecAb
URLリンク(www1.jawink.ne.jp)

既にでてるかな?

304:名前は開発中のものです。
04/01/23 01:56 hxTgIGSZ
何回かチャレンジしたけど、
ヘリも飛行機も操縦がムズ過ぎ。速いマシンほど速く動いてる?
もっと簡単だったら楽しいような…

じゃ、更に追加で、
URLリンク(www2.odn.ne.jp)
同じサイト内だけど、
URLリンク(www2.odn.ne.jp)
も。
下のは複雑すぎでした…


305:名前は開発中のものです。
04/01/25 01:26 hok/ATwA
このすれっどをみて
ぼくは
じゃばよりふらっしゅのほうがいいんだなと
おもいました。

306:名前は開発中のものです。
04/02/10 01:23 roXOg29f
>>305
そう思ったなら多分それが正解。
適材適所。

307:名前は開発中のものです。
04/05/12 17:29 +KwjynEM
URLリンク(www15.tok2.com)

308:名前は開発中のものです。
04/05/15 11:19 atd2UrGF
おお、久しぶりの書き込みだな。
せっかくの書き込みなのにすまないんだが、

>>307
すまん、全然たいしたことない。
ってゆーか、ほとんど正男じゃん。
もっと凄いjavaゲームはないものか。

309:名前は開発中のものです。
04/06/07 18:19 KZ9AiAg4
ゲームの限界というより作り手の限界…

310:名前は開発中のものです。
04/06/21 18:11 uNmG74S6

URLリンク(java.sun.com)

JAVAサウンドプログラマーズガイド

311:名前は開発中のものです。
04/06/21 18:50 WQ1GKg6I
>>307のゲームは一体何もどきなんだろう?

312:名前は開発中のものです。
04/09/27 00:03:41 aLBna6ae
質問です。
Javaアプリでゲーム作ってますが、どうしても逆コンパイルかけられて
ソースを覗かれるのがいやなのです。
何か良い方法はありませんか?


313:名前は開発中のものです。
04/09/27 00:41:30 be/ifB4A
難読化とかすればいいんじゃね?

もしくは、すべてのクラスファイルを独自で暗号化して、
自前の複合化クラスローダー無しには読み取れなくして、
そのクラスローダーの使い方を難しく&難読化して、読めなくするとか。


以下、参考までに。

jarg - 最適化ツール
URLリンク(jarg.sourceforge.net)

RetroGuard配布サイト(英語) - 難読化ツール
URLリンク(www.retrologic.com)

RetroGuard日本語解説サイト?
URLリンク(mascot.mis.ous.ac.jp)

Java無関係用語集 - 難読化について
URLリンク(www.netgene.co.jp)

314:名前は開発中のものです。
04/09/27 00:42:36 be/ifB4A
マルチだったのか・・・

315:名前は開発中のものです。
04/09/27 07:34:52 aLBna6ae
>>313
ご親切に、ありがとです。
早速、jargで難読化したり、jodeで逆コンパイルして確かめてみたり
してみました。
・・ん〜、簡単に覗けてしまいました。

根本的な解決方法としては、
>すべてのクラスファイルを独自で暗号化して、
>自前の複合化クラスローダー無しには読み取れなくして、
>そのクラスローダーの使い方を難しく&難読化して、読めなくする
かもしれません。是非、もう少し掘り下げて教えていただきたいです。

316:名前は開発中のものです。
04/09/27 07:51:00 MzHevRDp
URLリンク(java.sun.com)

317:名前は開発中のものです。
04/09/27 19:28:31 n84gmfqB
>>315
jarg で最適化すれば、それなりに読みにくくなっているはず。

難読化ツールは、逆コンパイルを不可能にするんじゃなくて、
逆コンパイルされても、読みにくくて解読したくなくなるように出来るって事。

昨日言い忘れてたけど、jmangle って難読化ツールもある。 結構、サクッと使えていい感じ。

Jmangle 配布サイト
URLリンク(www.elegant-software.com)


> 根本的な解決方法としては、
> > すべてのクラスファイルを独自で暗号化して、
> > 自前の複合化クラスローダー無しには読み取れなくして、
> > そのクラスローダーの使い方を難しく&難読化して、読めなくする
> かもしれません。是非、もう少し掘り下げて教えていただきたいです。

この説明で分からないなら、ちょっと解説に時間がかかりそうだが・・・どうするか・・・
まぁ、自分も近いうちに、これをやってみようと思ってたから、まとめてみるかも。


つーか、マルチ('A`)イクナイ

318:名前は開発中のものです。
04/09/30 22:22:50 oihGIM+f
やっぱマンドクセ

319:名前は開発中のものです。
04/09/30 22:36:30 SJALzkxF
Web開発ではやったことあるけど、ゲーム作る程度でやる気ないなぁ。
どうせ、作るつもりないだろうけど。

320:名前は開発中のものです。
04/10/02 13:58:02 mB8JJc6Y
これが一番手っ取り早いのでは!?
>>スレリンク(tech板:152番)


321:25
04/10/03 01:54:29 clInMJlt
>>320
JNIか。
確かに手っ取り早いかもしれないけど、ネイティブ 絡むとマンドクセ。


>>315
見てるかどうか知らないけど、まとめてみた。

URLリンク(potage.s58.xrea.com)

とりあえず脳内にあるのをメモっただけだから意味不明かもしれないが、まったり考えていく予定。
実際に作るかどうかは分からん。

322:名前は開発中のものです。
04/10/03 01:58:11 clInMJlt
ぐはぁっ _/\○_
名前が…

323:315
04/10/03 12:02:03 drsRfI5F
>>321
毎日拝見しております・・。
321さんのHP覗いてみたのですが、インスタンスをClassクラスで生成する際の問題は、
newInstanceメソッドで引数なしでnewした後、初期化処理を行うメソッドを呼び出すようにすれば良いかと。
それとも、別のクラスにコンストラクタの引数に渡したいオブジェクトをsetterメソッドで登録しておけば、
引数なしのコンストラクタ内でその値をgetterメソッドで取り出すルールを
設ければうまくいくのではないでしょうか?
暗号化する・しないはクラス設計時に判断しないと無理ですけど。
出来れば、呼び出す側で暗号化ロジックを通す通さないで、ハンドリングできれば
便利で良いのですが。
クラスの直列化や複製もインタフェースをあらかじめ実装しないと
例外が発生するから別に当たり前の実装方法かも。

324:315
04/10/03 12:32:06 drsRfI5F
続き
内部クラスもクラスファイルをロードしないと無理です。

325:321
04/10/03 13:53:25 aFzOfy+1
ってか、シリアライズでちょっと思ったんですけど、
暗号化したいクラス(以下A)のメソッドを定義したインターフェイス(以下AI)を用意して、
A をシリアライズでファイルに書き出して、その時暗号化しとく。

んで、読み込み時に AI にキャストすればソースに手を加えなくても、
なんとかなりそうな気がする。

326:321
04/10/03 14:37:14 t6nSKj1T
なんか思いつきで書き込みしてしまったけど、
本質的なコンストラクタの呼び出しの問題は全く解決してないですね^^;

> newInstanceメソッドで引数なしでnewした後、初期化処理を行うメソッドを呼び出すようにすれば良いかと。
コンストラクタでしか呼べないモノの問題が出てくるのではないでしょうか?(super とか。)

> それとも、別のクラスにコンストラクタの引数に渡したいオブジェクトをsetterメソッドで登録しておけば、
> 引数なしのコンストラクタ内でその値をgetterメソッドで取り出すルールを
> 設ければうまくいくのではないでしょうか?
これなら、いけそうな気がしなくもないですね。
いろいろと面倒な感じになりそうですが、現実的かと。

> 出来れば、呼び出す側で暗号化ロジックを通す通さないで、ハンドリングできれば
> 便利で良いのですが。
暗号化したクラスも、暗号化していないクラスも同じように呼べるって事でしょうか?

> クラスの直列化や複製もインタフェースをあらかじめ実装しないと
> 例外が発生するから別に当たり前の実装方法かも。
頭悪いのでよく理解できません(;´д`)
申し訳ない。

> 内部クラスもクラスファイルをロードしないと無理です。
やはりそうですか・・・


ってか最初、マルチやってたので、ぶっちゃけ見くびってましたが
意外に実力のある方のようでつね。 ごめんなさい&内定ください。(何

327:315
04/10/03 16:44:18 Ab3yDh7p
>>326
> クラスの直列化や複製もインタフェースをあらかじめ実装しないと
> 例外が発生するから別に当たり前の実装方法かも。
説明へたくそですみません。
クラスをシリアライズする時、Serializableインタフェースが実装していないと
NotSerializableException例外が発生。
複製するときも、Cloneableインタフェースを実装していないと、
CloneNotSupportedException例外が発生。
なので、暗号化させたいクラスにも暗号化に必要なメソッドや変数を定義してある
暗号化インタフェースを実装していないと
"暗号化インタフェースが見つからない"例外を発生させて、
コンパイル時に開発者に警告をうながす事も使いづらいの反面
合理的なのかなと思ったわけです。

328:321
04/10/03 18:19:21 l36e1OTn
>>327
なるほどなるほど。そういう意味でしたか ^^;
しかし、そうなると疑問なのは、実装どうなるのかなぁ?と。

自分の中では、

・クラスファイルをデコンパイルさせたくないぜ。
・専用クラスローダーでしか読めなくすればいい。
・コンストラクタの呼び方が面倒になっちゃった。
・暗号化対応ソース自動変換ツールで、暗号化を意識しなくても大丈夫なシステムを!
・自動置き換えの、置き換え方を考えるぞ〜

って流れなので。

暗号化インターフェイスで暗号化を制御するとなると、実装はどうなるんだろう?って思うわけです。
暗号化インターフェイスを実装していたら、暗号化する?
暗号化するのは誰?
com.sun.tools.javac.main.Main を使って自力で暗号化コンパイラを作る?

みたいな。

329:名前は開発中のものです。
04/10/05 00:20:10 vzG1Y+sw
>>328
その前に一つ問題があるのですが、独自で実装したクラスが独自で実装した
インタフェースをimplementsしていた場合、どうやってクラスオブジェクトを
ClassLoaderから取得できるのでしょうか?
インタフェースだけならClassオブジェクトを取得出来るのですが、
インタフェースを実装したクラスの場合では、NoClassDefFoundError例外が発生します。


330:名前は開発中のものです。
04/10/05 01:03:07 2w/Bi/QR
Javaアプレットって、やっぱりサーバにプログラムを置いていても
クライアントから持っていかれて逆コンパイルされるんだよね?

331:名前は開発中のものです。
04/10/05 01:07:54 vzG1Y+sw
>>330
なので、逆コンパイルできないネイティブコードでClassLoaderクラスを
独自実装するか、それとも、逆コンパイルされても解読が難しくなるように
ソースを難読化するかのどちらかに分かれて検討しているところです。


332:名前は開発中のものです。
04/10/05 12:43:28 pyJtAE+Y
クラスローダをネイティブコード?
アプレットならデフォだとセキュリティでひっかかるんじゃないの?

署名したりインストールの手間とか考えると
普通にアプリケーションベースでネット経由でJNIをまぜつつ
ダイナミックにクラスをロードするほうが便利な気がするんだが


333:名前は開発中のものです。
04/10/05 13:06:55 J9uCsa2u
どんな暗号使っても
その独自クラスローダを勝手に呼び出されたら
それで終わりだと思うんだけど。

結局ユーザ側で実行できるってことは
どっかで普通のバイトコードに落ちるんでしょ?
それを読む方法が何かしらあるわけで

334:321
04/10/05 14:53:07 UnlMJM9l
>>329
すみません。今のところ全て机上論なので実際のところは分かりません。
今から実際にソース書いて実験します(´д`;)

>>333
独自クラスローダーのインスタンスの作成の仕方を難読化すればいいと考えています。

沢山の偽者コードの中に本物を一つ書いてスパゲッティーにしたり、
さらに難読化ツールでメソッド名なんかを変えると、読めなくなると思います。
また、ダミークラスローダーなんかも、いくつか作れば、どれが本物なのか分からず
解読を諦めるのではないでしょうか?
藁の中から針を探す難しさだと思います。

アプリケーションの中身とは全く違う部分で労力をかけますが ^^;

335:333
04/10/05 15:45:56 J9uCsa2u
>>334
いや、同じことだと思うよ

ClassLoader#(String,byte[],int,int)に
ブレークポイント張ってデバッガで実行されたら
アウトなんじゃないの?

336:321
04/10/05 16:37:25 oJqqTbhC
ぐはっ!!!
そうっすね…少々焦点が狭かったか…

あと、

new Exception().printStackTrace();

とか、コードに埋め込まれたら
処理の流れが分かるって事も、今思い出しますた。

工夫しても解読されるのは時間の問題か…

モウダメポ('A`)

337:321
04/10/05 16:51:04 oJqqTbhC
RMI 使ってインスタンスを取得すれば大丈夫そうな…
うーん。サーバーが常に動いてないとダメだけど。

338:名前は開発中のものです。
04/10/05 17:00:29 pyJtAE+Y
そこまで暗号化が必要なアプレットのゲームってのはそうそう多くない希ガス

339:321
04/10/05 17:43:10 oJqqTbhC
まぁ、アプレット限定の話しではありませんです。

340:名前は開発中のものです。
04/10/05 18:28:28 pyJtAE+Y
>>321
このスレの名前をいってみろ


341:321
04/10/05 18:37:44 oJqqTbhC
放置・過疎スレ。

342:名前は開発中のものです。
04/10/05 21:51:30 qIq4WQNz
>>339
いきなりスレの前提からはずれとるがなw
それならJAVA使わずネイティブコードでやる方がより良さそうだし

343:名前は開発中のものです。
04/10/05 21:57:58 u1RKRDG3
リバースエンジニアリングをどうしても防ぎたいのなら、ネイティブコードを吐く言語を使用したほうが良い希ガス。

344:名前は開発中のものです。
04/10/05 22:38:11 pyJtAE+Y
ネイティブなバイナリでもそのプログラマとコンパイラの癖わかれば
それなりに簡単にわかるぞい

あたりがつけばどんどん加速度的に分かるものだ

クラックされるくらい関心度の高いゲームが作れるかどうかのほうが重要だと思うんだがね


345:321
04/10/05 23:10:54 oJqqTbhC
>>342
> いきなりスレの前提からはずれとるがなw

>312 で逆コンパイルを防ぎたいとのマルチ質問があり、
俺がうっかりマジレスしたのが始まりで、それからは逆コンパイルを防ぐ話題でした。
>>312 以降、アプレットの話しは一切してないっす。
人も全然いないみたいだし、問題ないか、と思って。

>>343
そりゃそうだけど・・・_| ̄|○

>>344
> クラックされるくらい関心度の高いゲームが作れるかどうかのほうが重要だと思うんだがね
ごもっとも。


どこかのスレで、

実行できるものを配るということは
暗号化したファイルと、複合化のキーを一緒にして配るようなものだから。
いくら暗号化しても防ぐのは無理。 解析されるのも時間の問題。

って読んだ希ガス。今、思い出した。

346:名前は開発中のものです。
04/10/05 23:55:58 2w/Bi/QR
解析されるのが手間になる方向しかないわけね。

347:名前は開発中のものです。
04/10/06 22:03:14 dUtJtg+D
難読化ってそういうことだからなぁ。

先進的なアイデアなら特許取れるし。
昔なら実行時書き換えって技もあったけど、いまどき現実的でないしなぁ。

どうやって難読化しようかって考えるより、一行でもコード書いたほうが
自分のためになるんだよな。

.NET用のは結構いいのがあるようなのだが。

乱文失礼


348:名前は開発中のものです。
04/10/06 22:22:02 CQVHxZ5S
>昔なら実行時書き換えって技もあったけど、いまどき現実的でないしなぁ。
VM依存言語だと実行時中間言語生成ってな話かねぇ。

>.NET用のは結構いいのがあるようなのだが。
確かに。
Javaな方面ではサイズ縮小だけが狙いで、本来の意味での難読化の要求が少ないのかも。


349:名前は開発中のものです。
04/10/06 22:34:27 WwhPAGcr
test

350:名前は開発中のものです。
04/10/06 22:44:22 Em+Tmfm5
まぁ10年くらい前から開発されてきたものだしなぁ

351:名前は開発中のものです。
04/10/06 23:04:15 ekr4P7Le
Java Pressのvol35に、難読化とクラスローダーについて書いてあった。
RetroGuardか何かが、クラス名やメソッド名をaとかbにするみたいだが、
クラスサイズを犠牲にしても、a05470210303とかの方が難読化にならないかな、
と思ったが、リファクタリングで変換一発か。

352:312
04/10/07 00:34:57 SXGuxMIT
>>351
詳細希望。ま、買えばいっか。

Javaアプレットでは無い時点で論外ですが、自分の作っている
ゲームアプリはJavaWebStartを使用しています。
なぜか、メインフレームの部分が解読不可能でした。
jodeとかmochaで試したのですが、エラー起きちゃいます。
そんな訳で当分は検討しなくてもよいかな〜と考えている所です。
勝手ながら、この件のレスはここでクローズと言うことで。


353:名前は開発中のものです。
04/10/07 01:32:11 WcODZ6m5
変なフォーマットのclassファイルを作って
MSのVMでは動くけどSunのjavapではエラーが
出るようにしてたアプレットがあったなー

たしかkomplexのデモだったと思うけど

354:名前は開発中のものです。
04/10/07 01:42:39 +NyIBcQo
クラスファイルのバージョンに対応してないとか

355:名前は開発中のものです。
04/10/07 02:05:51 7BhZIGQ/
webstartはアプレットとアプリケーションとあるから
一応また次元の違う話ではある

あとメインフレームってのが独自用語か?
なんとなくわかるが

356:312
04/10/07 02:36:24 SXGuxMIT
>>354
いえいえ。jodeで試した結果では、Java1.4でclassファイルを普通に認識しました。
ですが、複数のクラスを読み込んだうち、ソースに変換するものと例外が発生するものと様々でした。
例外はjodeパッケージに含まれている独自の例外クラスでしたので、詳細は分かりません。

>>355
>webstartはアプレットとアプリケーションとあるから
WebStartってアプレットでも配布可能でしたっけ?

>メインフレームってのが独自用語か?
すいません、これは、mainメソッドを実装しているFrameクラスの継承クラス
の事を指します。


357:名前は開発中のものです。
04/10/07 11:01:50 7BhZIGQ/
webstartアプレットってしらんかね
JNLPしらべてみそ

ちなみに新しいウインドウが出てブラウザから独立するので
ブラウザを終了させてもいいとかそういう感じ

もはやアプレットである利点はさほどないけど
すでにアプレットになっているやつをwebstartにするならそれなりに価値もあるのかも
あとはinsetsを気にしなくていいくらいかな

もちろんいろいろなやりとりはJNLPAPIでやるというのもかわらない

358:名前は開発中のものです。
04/10/10 11:51:36 RlxkQKMF
>>357
webstartを起動したときに、クライアント側にアプレットのモジュールを
DLしておき、ブラウザを自動で起動した後で、クライアントにDL
したモジュールを読み込ませるって事ですか?

単純にブラウザを起動するアプリをjnlpのAPIを使って実装し、
ブラウザ側ではアプレットを配置してあるページを表示させる
だけであるなら、webstartはあまり関係が無いような。
jnlpAPIでブラウザを起動するとき、何か利点あるのでしょうか?



359:名前は開発中のものです。
04/10/10 14:23:36 2gZf+UVq
WebStartは

・ブラウザを閉じても起動したままで終了処理とか管理が楽
・JNLPAPIでローカルの資源を(デフォで警告は出るが)比較的危険のない範囲で使える
・キャッシュ処理によりアプレットのように毎回ロードしない
・細かいVMのバージョンチェックが可能
・2回目からはデスクトップやランチャーのショートカットでブラウザに関係なく起動できる

質問の意味がちょっとわからないが
URLClassLoaderを勉強するといい

これを使えばスタンドアロンのJavaアプリケーションでもバージョン管理とかが可能
これで俺はシステムたくさん組んでいる

ゲームでもjarファイルを別管理することによりゲーム本体と拡張部分を分けて管理が可能
RPGならソーサリアンとかのシステムとシナリオを分けるとかSTGだとコアと面データを分けるとか

360:名前は開発中のものです。
04/10/10 15:07:46 RlxkQKMF
>>359
質問はwebstartって何?
では無くて、
質問はwebstartappletって何?
です。

私も、webstartで2DRPGを作っています。


361:名前は開発中のものです。
04/10/10 19:15:39 2gZf+UVq
jnlpファイルの書式みてみろ
普通のアプレットを指定できる

利点はWebstartのAPIが使えるなど上に書いたのと同じだ

362:名前は開発中のものです。
04/10/10 19:36:52 7+4TU6CI
アプレットも署名すれば、ローカルPCにアクセスできるよね。

363:名前は開発中のものです。
04/10/10 20:13:16 inJquGiH
署名ってどうやるの

364:名前は開発中のものです。
04/10/10 20:25:04 RlxkQKMF
webstart経由でアプレットが起動されれば、
クラスローダーやセキュリティマネージャがwebstartに依存されているため、
アプレットの時のようなややこしい設定プロセスを簡略化できる。

ということは、アプレットプログラム内でコンソール出力したり
すれば、webstartにログ出力されるという事か。

もし、そうだとしたら、使えるかも。
やりたいことがあるが、ちょっとセキュリティ上無理かと思っていたことが
可能になるかも・・。(独り言)


365:名前は開発中のものです。
05/02/22 18:59:11 KzKSqXlr
やっぱりみんなそこまでしてソースを隠したいんだよね。
だから参考にしようとソース探しても全然ない。
結局掲示板で質問房が増える。
なんだかな〜。

366:名前は開発中のものです。
05/03/28 02:49:42 kEg8t2iM
ってなわけで、作ってみました。

367:367
05/04/04 01:42:44 29VrGWc9
こんな感じになりましたが、どうでしょう?
>>URLリンク(gbsaga.ddo.jp)



368:名前は開発中のものです。
05/08/02 10:06:22 T+awd9IP
保守

369:π
05/12/14 00:42:07 au/Ihpoc
質問です。
Linux環境でアプレットのアニメーションを作っています。
ダブルバッファリングしているのにちらついています。
どこかの大学の講義のページでダブルバッファリングするとこうなる、っていう例を見てもちらついているようなので、LinuxとNetscapeで実行するのに何か問題があるのでしょうか?
不思議なことにアプレットビューワの上でマウスを動かし続けていると非常になめらかに動き続けます。
カーソルを止めるとまた、たまにカクッカクッと止まります。
なんなんでしょう?アプレットビューワの上でカーソルを動かしてる間はなめらかってのは…。

370:名前は開発中のものです。
05/12/14 03:26:56 UOIsfffY
>>369
ソース公開汁。
アプレットビューワはそんなに信用しないほうがいい。
ブラウザでは出来ない動作が可能だからだ。



371:名前は開発中のものです。
05/12/14 09:22:28 VHYWcMtd
Flash 8.5が出たらJavaアプレットは今度こそ死ぬな。

372:π
05/12/14 12:46:00 au/Ihpoc
ありがとうございます。そうなんですか。アプレットビューワは信用できないんですか?
実際に何が起こっているのかはわかりませんが、外見上は、たまにrepaint飛ばしてるんじゃないかって感じで、
一瞬止まったように見えるのです。で、カカカカカカカカカカクッカカカカカカカカカクッカカカカカカと…
マウスカーソルをアプレットビューワの上で動かしてると、凄くなめらかなアニメーションになって
スーと動きます。ずっとこんな風に動けばいいのに…。普通のことしか書いてませんがソースはこんな感じです。

373:π
05/12/14 12:46:39 au/Ihpoc
//RunnableをimplementしているAppletのサブクラス内です。
public void start(){
super.start();
image = createImage(width, height);
/*オフスクリーンのGraphics*/
preg = image.getGraphics();
if(thread == null){
thread = new Thread(this);
thread.start();
}
}
public void stop(){
thread = null;
}

374:π
05/12/14 12:47:50 au/Ihpoc
public void run()
{
Thread thread0 = Thread.currentThread();
/*whileの条件式は丸移しですがこれでいいのか気になります*/
while(thread == thread0){
try{
thread0.sleep(50);
}
catch(InterruptedException e){
}
/*
ここにパラメータの変更
*/
repaint();
}
}
public void update(Graphics g){
paint(g);
}
public void paint(Graphics g){
preg.clearRect(0, 0, width, height);
/*
ここに描画の部分draw****(preg, *****)って感じ
*/
g.drawImage(image, 0, 0, this);
}

375:名前は開発中のものです。
05/12/14 20:39:46 cJCmSJXT
repaint()の直後に、再描画が行われる訳じゃないんですよ。
描画イベントをイベントキューに入れるだけなんですね。
イベントキューから描画イベントが取り出された時点で、初めて描画されるのですね。
そのスレッドのタイミングによっては、複数のrepaint()がある特定のコマで
一緒にされたり、故にあるコマでのrepaintが飛ばされてしまうのですね。
マウスカーソルを動かすと、システムから連続でrepaintが発送されるので
タイムラグがなくなり、スムーズに描画できるのです。故に解

376:π
05/12/14 21:00:58 au/Ihpoc
なるほどX11だとXFlushしないといけないのと同じなのですね。
納得です。
ありがとうございました。

377:名前は開発中のものです。
05/12/14 21:15:58 7r834BYR
どういたしまして

378:名前は開発中のものです。
06/02/07 02:44:56 YcqHXq4X
「アプレットの読み込みに失敗しました。」
コンソールには
「************.classが見つかりません。」
と書いてあります。
デスクトップ上ではアプレットがちゃんと動作するのですが、
同じファイル(jarファイルとhtmlファイル)をアップロードしてから読み込むと見つからないと言われます。
どのような間違いが考えられるでしょうか?

379:名前は開発中のものです。
06/02/09 01:59:14 2XaB8tQa
winSCPで転送するときに、
バイナリとか、テキストとか、なんか削除するとか設定が問題なのかなぁ。
転送後の画像がめちゃめちゃになったりしている…。

380:名前は開発中のものです。
06/02/09 02:18:23 KZsev84P
文字変換して転送してるのかよ

381:名前は開発中のものです。
06/02/09 03:30:00 2XaB8tQa
転送モードがテキスト、バイナリ、自動(特定の拡張子のファイルはテキストモード)とあって、
テキストモード、バイナリモード試してもうまくいかない。
サイズも変わってなさそうだし…。
自分のPC上では動くし…。


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

5128日前に更新/152 KB
担当:undef