携帯アプリについて midp

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
アプリ

携帯アプリについて midp

#1

投稿記事 by アプリ » 16年前

板が違ったらすいません・・・。
C言語ではなくMIDPにのっとってauのアプリを作っております。

デバック環境だと画像が表示されるのですが
吐き出されたjarファイルでは画像が表示されません・・・。

なぜでしょうか?

どうやっても解決できないです・・・

toolbar.exe

バグ

Re:携帯アプリについて midp

#2

投稿記事 by バグ » 16年前

念の為に確認しますが、オープンアプリプレイヤーに対応した機種ですよね?

アプリ

Re:携帯アプリについて midp

#3

投稿記事 by アプリ » 16年前

そうです><

ただ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

#4

投稿記事 by アプリ » 16年前

Moon = Image.createImage("/select.png");
Sun = Image.createImage("/taiyo.png");
Select = Image.createImage("/select.png");

なっておりますが気にしないでください。

添付物が現在の環境なのですが
デバックと吐き出されるものがどうやっても違います・・・

なぜなのでしょうか・・・?

どなたか本当に助けてください・・・

バグ

Re:携帯アプリについて midp

#5

投稿記事 by バグ » 16年前

私はAUユーザーではないのでテストできないので申し訳ないです。
ただ、ちょっと試していただきたいのですが、画像をPNGからGIFやJPGに変更しても駄目でしょうか?
昔、ドコモ携帯用のアプリを開発した際にPNGはサポートされていなかったように思いましたので…
的はずれな回答だったら申し訳ないですが(^_^;)

GPGA

Re:携帯アプリについて midp

#6

投稿記事 by GPGA » 16年前

質問をするときは開発環境を明記してください。

今回はアプリゲットのオープンアプリ開発講座で使用されている
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

#7

投稿記事 by アプリ » 16年前

バグ様
本当です><
いろんなサイトを見てみたら書いてありました。
一つの情報として役立たせていただきます。


GPGA様
なおりました><
なんでPNGになっていたのでしょうかねw

気になった点について、了解しました。
いろいろと教えていただきありがとうございました。

一応、実機上では表示できました。
ただデバック上では問題ないのですが実機で
pngの透過部分を白と判定してしまう(透過されない)のですが
これはしょうがないのでしょううか?

GPGA

Re:携帯アプリについて midp

#8

投稿記事 by GPGA » 16年前

>pngの透過部分を白と判定してしまう(透過されない)のですが
>これはしょうがないのでしょううか?
pngの色がフルカラーになっているので256色に減色して試してみてください

アプリ

Re:携帯アプリについて midp

#9

投稿記事 by アプリ » 16年前

減色?できていないかもしれないのですが
かなりファイルサイズを小さくしました。
ただそれでも表示できなかったので
図形の描画でセレクトを補う?ようにしました。

これでも実機上でのみ透過されませんでした。
友人(midpに関しては素人)に聞いたところ機種が対応してないのではといわれました。


使っている機種 W54S
画像編集 PhotoShopCS3 AC(正式版)です。
     
PhotoShopだとどうやってもフルカラーで保存されてしまいませんか?

GPGA

Re:携帯アプリについて midp

#10

投稿記事 by GPGA » 16年前

Photoshopならメニューのどこか(確か編集)にインデックスカラーという項目があるはずです。
これで、保存すれば256色で保存されます

アプリ

Re:携帯アプリについて midp

#11

投稿記事 by アプリ » 16年前

GPGAさん
おお~~
できました~透過できました><

ここはCの掲示板なのに皆様凄いですね・・・
ありがとうございます。

閉鎖

“C言語何でも質問掲示板” へ戻る