板が違ったらすいません・・・。
C言語ではなくMIDPにのっとってauのアプリを作っております。
デバック環境だと画像が表示されるのですが
吐き出されたjarファイルでは画像が表示されません・・・。
なぜでしょうか?
どうやっても解決できないです・・・
toolbar.exe
携帯アプリについて midp
-
アプリ
Re:携帯アプリについて midp
そうです><
ただPC上でいくつかプロジェクトを作ったことがあるのですが
あるプロジェクトだけデバック環境で動くのに
吐き出されたファイルをPC上でクリックすると画像がないんです・・・
以下ソースです。
game.java
gameCanvas.java
//////////
画像はresに入っております。
png三枚 それぞれ48*48
ただPC上でいくつかプロジェクトを作ったことがあるのですが
あるプロジェクトだけデバック環境で動くのに
吐き出されたファイルをPC上でクリックすると画像がないんです・・・
以下ソースです。
game.java
import javax.microedition.lcdui.*;
import javax.microedition.midlet.*;
//(本体)
public class game extends MIDlet {
//コンストラクタ
public game() {
//キャンバスの指定
KeyCanvas c = new KeyCanvas();
Display.getDisplay(this).setCurrent(c);
//スレッドの実行
(new Thread(c)).start();
}
//アプリの開始
public void startApp() {
}
//アプリの一時停止
public void pauseApp() {
}
//アプリの終了
public void destroyApp(boolean flag) {
}
}
////////////////////////gameCanvas.java
import javax.microedition.lcdui.game.*;
import javax.microedition.lcdui.*;
import java.util.*;
//キー入力の処理(キャンバス)
class KeyCanvas extends GameCanvas
implements Runnable, CommandListener
{
private int keyEvent = -999; //キーイベント
private int keyState; //キー状態
private Command[/url] command = new Command[2];//コマンド
int SelPx = 96;
int SelPy = 96;
int[/url][/url] MapArray = {
{0,0,0,0,0},
{0,1,2,1,0},
{0,2,2,2,0},
{0,1,2,1,0},
{0,0,0,0,0}
};
//コンストラクタ
KeyCanvas()
{
//キーイベントの抑制
super(false);
}
//実行
public void run()
{
//グラフィックスの取得
Graphics g = getGraphics();
//画像ファイルの読み込み
Image Moon = null;
Image Sun = null;
Image Select = null;
try
{
Moon = Image.createImage("/tuki.png");
Sun = Image.createImage("/taiyo.png");
Select = Image.createImage("/select.png");
}
catch (Exception e)
{
System.out.println(e.toString());
}
//コマンドの生成
command[0] = new Command("速", Command.SCREEN, 0);
command[1] = new Command("遅", Command.SCREEN, 1);
//コマンドの追加
addCommand(command[0]);
addCommand(command[1]);
//コマンドリスナーの指定
setCommandListener(this);
while (true)
{
//キーイベントの処理
if (keyEvent == FIRE)
{
int x = SelPx / 48;
int y = SelPy / 48;
// ↑
if (MapArray[y - 1][x] == 1)
{
MapArray[y - 1][x] = 2;
}
else if (MapArray[y - 1][x] == 2)
{
MapArray[y - 1][x] = 1;
}
// ←
if (MapArray[y][x-1] == 1)
{
MapArray[y][x-1] = 2;
}
else if (MapArray[y][x-1] == 2)
{
MapArray[y][x-1] = 1;
}
// ×
if (MapArray[y][x] == 1)
{
MapArray[y][x] = 2;
}
else if (MapArray[y][x] == 2)
{
MapArray[y][x] = 1;
}
// →
if (MapArray[y][x+1] == 1)
{
MapArray[y][x+1] = 2;
}
else if (MapArray[y][x+1] == 2)
{
MapArray[y][x+1] = 1;
}
// ↓
if (MapArray[y+1][x] == 1)
{
MapArray[y+1][x] = 2;
}
else if (MapArray[y+1][x] == 2)
{
MapArray[y+1][x] = 1;
}
}
if (keyEvent == UP) SelPy -= 48;//上キー
if (keyEvent == DOWN) SelPy += 48;//下キー
if (keyEvent == LEFT) SelPx -= 48;//左キー
if (keyEvent == RIGHT) SelPx += 48;//右キー
keyEvent = -999;
//キー状態の処理
/*
keyState = getKeyStates();
// if ((UP_PRESSED & keyState) != 0) SelPy -= 48;//上キー
if ((DOWN_PRESSED & keyState) != 0) SelPy += 48;//下キー
if ((LEFT_PRESSED & keyState) != 0) SelPx -= 48;//左キー
if ((RIGHT_PRESSED & keyState) != 0) SelPx += 48;//右キー
*/
if (SelPx < 48)
{
SelPx = 48;
}
else if (SelPx > 48 * 3)
{
SelPx = 48 * 3;
}
if (SelPy < 48)
{
SelPy = 48;
}else if(SelPy > 48*3){
SelPy = 48 * 3;
}
//描画
g.setColor(255, 255, 255);
g.fillRect(0, 0, getWidth(), getHeight());
for (int i = 0; i < 5; i++)
{
for (int j = 0; j < 5; j++)
{
if (MapArray[j] == 1)
{
g.drawImage(Moon, j*48, i*48, Graphics.LEFT | Graphics.TOP);
}
else if (MapArray[j] == 2)
{
g.drawImage(Sun, j * 48, i * 48, Graphics.LEFT | Graphics.TOP);
}
}
}
g.drawImage(Select, SelPx, SelPy, Graphics.LEFT | Graphics.TOP);
flushGraphics();
//スリープ
try
{
Thread.sleep(50);
}
catch (Exception e)
{
}
}
}
//キープレスイベント
public void keyPressed(int keyCode)
{
if (keyCode == 0) return;
switch (getGameAction(keyCode))
{
case FIRE:
keyEvent = FIRE;
break;//選択キー
case UP:
keyEvent = UP;
break;//選択キー
case DOWN:
keyEvent = DOWN;
break;//選択キー
case RIGHT:
keyEvent = RIGHT;
break;//選択キー
case LEFT:
keyEvent = LEFT;
break;//選択キー
}
}
//コマンドイベント
public void commandAction(Command c, Displayable disp)
{
/*
if (c == command[0]) speed = 10;
if (c == command[1]) speed = 5;
*/
repaint();
}
}//////////
画像はresに入っております。
png三枚 それぞれ48*48
-
アプリ
Re:携帯アプリについて midp
Moon = Image.createImage("/select.png");
Sun = Image.createImage("/taiyo.png");
Select = Image.createImage("/select.png");
なっておりますが気にしないでください。
添付物が現在の環境なのですが
デバックと吐き出されるものがどうやっても違います・・・
なぜなのでしょうか・・・?
どなたか本当に助けてください・・・
Sun = Image.createImage("/taiyo.png");
Select = Image.createImage("/select.png");
なっておりますが気にしないでください。
添付物が現在の環境なのですが
デバックと吐き出されるものがどうやっても違います・・・
なぜなのでしょうか・・・?
どなたか本当に助けてください・・・
-
バグ
Re:携帯アプリについて midp
私はAUユーザーではないのでテストできないので申し訳ないです。
ただ、ちょっと試していただきたいのですが、画像をPNGからGIFやJPGに変更しても駄目でしょうか?
昔、ドコモ携帯用のアプリを開発した際にPNGはサポートされていなかったように思いましたので…
的はずれな回答だったら申し訳ないですが(^_^;)
ただ、ちょっと試していただきたいのですが、画像をPNGからGIFやJPGに変更しても駄目でしょうか?
昔、ドコモ携帯用のアプリを開発した際にPNGはサポートされていなかったように思いましたので…
的はずれな回答だったら申し訳ないですが(^_^;)
-
GPGA
Re:携帯アプリについて midp
質問をするときは開発環境を明記してください。
今回はアプリゲットのオープンアプリ開発講座で使用されている
JDK1.5 と J2ME Wireless Toolkit 2.2を使用しているとして回答します。
直接的な原因はファイル名の大文字小文字です。
ファイルでは、「tuki.PNG」と「taiyo.PNG」が大文字になっており
プログラムでは「tuki.png」と「taiyo.png」が小文字で指定しているため
画像の作成に失敗し、drawImageでnullを指定しているので、フリーズしています。
デバッグ環境のときは、ファイルの大文字小文字が無視されているのでしょう。
その他気になった点がありましたので以下にあげます。
・jadファイルおよび、マニフィストファイルがUTF-8ではなく、S-JISで記述されている
・jarファイル内にThumbs.db(隠しファイル)がある(動作に問題があるわけではないが、無駄に容量がとられる)
J2ME Wireless Toolkit 2.2はjadファイルとマニフィストファイルをS-JISで記述しているので
UTF-8に修正する手順としては
1.MANIFEST.MFをテキストエディタ開き、UTF-8にエンコードして保存する
2.jarファイルをWinRARで開き、META-INF/MANIFEST.MFに先ほどのMANIFEST.MFを上書きする
3.jadファイルをテキストエディタで開き、「MIDlet-Jar-Size」の値を書き換え、UTF-8にエンコードして保存する
以上です。
今回はアプリゲットのオープンアプリ開発講座で使用されている
JDK1.5 と J2ME Wireless Toolkit 2.2を使用しているとして回答します。
直接的な原因はファイル名の大文字小文字です。
ファイルでは、「tuki.PNG」と「taiyo.PNG」が大文字になっており
プログラムでは「tuki.png」と「taiyo.png」が小文字で指定しているため
画像の作成に失敗し、drawImageでnullを指定しているので、フリーズしています。
デバッグ環境のときは、ファイルの大文字小文字が無視されているのでしょう。
その他気になった点がありましたので以下にあげます。
・jadファイルおよび、マニフィストファイルがUTF-8ではなく、S-JISで記述されている
・jarファイル内にThumbs.db(隠しファイル)がある(動作に問題があるわけではないが、無駄に容量がとられる)
J2ME Wireless Toolkit 2.2はjadファイルとマニフィストファイルをS-JISで記述しているので
UTF-8に修正する手順としては
1.MANIFEST.MFをテキストエディタ開き、UTF-8にエンコードして保存する
2.jarファイルをWinRARで開き、META-INF/MANIFEST.MFに先ほどのMANIFEST.MFを上書きする
3.jadファイルをテキストエディタで開き、「MIDlet-Jar-Size」の値を書き換え、UTF-8にエンコードして保存する
以上です。
-
アプリ
Re:携帯アプリについて midp
バグ様
本当です><
いろんなサイトを見てみたら書いてありました。
一つの情報として役立たせていただきます。
GPGA様
なおりました><
なんでPNGになっていたのでしょうかねw
気になった点について、了解しました。
いろいろと教えていただきありがとうございました。
一応、実機上では表示できました。
ただデバック上では問題ないのですが実機で
pngの透過部分を白と判定してしまう(透過されない)のですが
これはしょうがないのでしょううか?
本当です><
いろんなサイトを見てみたら書いてありました。
一つの情報として役立たせていただきます。
GPGA様
なおりました><
なんでPNGになっていたのでしょうかねw
気になった点について、了解しました。
いろいろと教えていただきありがとうございました。
一応、実機上では表示できました。
ただデバック上では問題ないのですが実機で
pngの透過部分を白と判定してしまう(透過されない)のですが
これはしょうがないのでしょううか?
-
GPGA
Re:携帯アプリについて midp
>pngの透過部分を白と判定してしまう(透過されない)のですが
>これはしょうがないのでしょううか?
pngの色がフルカラーになっているので256色に減色して試してみてください
>これはしょうがないのでしょううか?
pngの色がフルカラーになっているので256色に減色して試してみてください
-
アプリ
Re:携帯アプリについて midp
減色?できていないかもしれないのですが
かなりファイルサイズを小さくしました。
ただそれでも表示できなかったので
図形の描画でセレクトを補う?ようにしました。
これでも実機上でのみ透過されませんでした。
友人(midpに関しては素人)に聞いたところ機種が対応してないのではといわれました。
使っている機種 W54S
画像編集 PhotoShopCS3 AC(正式版)です。
PhotoShopだとどうやってもフルカラーで保存されてしまいませんか?
かなりファイルサイズを小さくしました。
ただそれでも表示できなかったので
図形の描画でセレクトを補う?ようにしました。
これでも実機上でのみ透過されませんでした。
友人(midpに関しては素人)に聞いたところ機種が対応してないのではといわれました。
使っている機種 W54S
画像編集 PhotoShopCS3 AC(正式版)です。
PhotoShopだとどうやってもフルカラーで保存されてしまいませんか?