質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Swing

SwingはJavaに標準で付属するグラフィック関連のクラスライブラリを指します。

Q&A

解決済

2回答

1397閲覧

2つの画像の位置関係など。アルゴリズムに関して

otftrough

総合スコア476

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Swing

SwingはJavaに標準で付属するグラフィック関連のクラスライブラリを指します。

0グッド

0クリップ

投稿2015/12/04 09:41

編集2015/12/04 09:44

今、swingでゲームを作っています。
イメージとしては、青鬼のような感じです。
画像を移動するメソッドがおかしいようなので見ていただけますか?
中央のアイコンが、指定した座標よりもすこし右下に表示されてしまいます。
機能は、キャラクターを右に動かすと、アイコンの座標が右に1pxとバックグラウンドの画像が左に2pxの、合計3pxずつ動くようになっています。
下に書いたメソッドでは、キャラクターのバックグラウンドに対する座標を引数で指定して、それをもとにバックグラウンドの座標を計算しています。

java

1//class MyGameSample 2 3int width; //画面の幅 4int height; //画面の高さ 5ImageIcon[] bgimg; //バックグラウンドの画像(1440px*810px) 6JLabel centerLabel; //bgimgを表示している。 7ImageIcon[] charIcon; //bgimgの上で動くアイコン(73px*73px) 8JLabel charLabel; //charIconを表示している。 9int nowStage; //今表示しているステージの番号 10int h; //bgimgの座標 11int v; //bgimgの座標 12int charH; //bgimgの左端からcharIconの中央までの距離(Horizon) 13int charV; //bgimgの上端からcharIconの中央までの距離(Vertical) 14int[] startingPoint; //一つ目はcharHの開始位置、2つめはcharVの開始位置 15 startingPoint[0] = bgimg[nowStage].getIconWidth() / 2; 16 startingPoint[1] = bgimg[nowStage].getIconHeight() / 2; 17 18/************************************************************************************************/ 19public void setCharPoint(int right, int top){ 20 21 charH = right; 22 charV = top; 23 h = (width - bgimg[nowStage].getIconWidth()) / 2 + (startingPoint[0] - charH) / 3 * 2; 24 v = (height - bgimg[nowStage].getIconHeight()) / 2 + (startingPoint[1] - charV) / 3 * 2; 25 centerLabel.setBounds(h, v, bgimg[nowStage].getIconWidth(), bgimg[nowStage].getIconHeight()); 26 charLabel.setBounds(h + charH, v + charV, charIcon[0].getIconWidth(), charIcon[0].getIconHeight()); 27}

javaファイルなどここからダウンロード
レンタルサーバーにzipファイルをアップロードしてあります。
ブラウザから「一般にダウンロードされておらず、危険です」と出る場合がありますが、危険ではありません。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

自己解決

setBounds()に渡す値を間違えてました。

java

1 public void setCharPoint(int right, int top){ 2 3 charH = right; 4 charV = top; 5 if(startingPoint[0] - charH != 0){ 6 h = (startingPoint[0] - charH) / 3 * 2; 7 } else h = 0; 8 if(startingPoint[1] - charV != 0){ 9 v = (startingPoint[1] - charV) / 3 * 2; 10 } else v = 0; 11 h += (width - bgimg[nowStage].getIconWidth()) / 2; 12 v += (height - bgimg[nowStage].getIconHeight()) / 2; 13 centerLabel.setBounds(h, v, bgimg[nowStage].getIconWidth(), bgimg[nowStage].getIconHeight()); 14 charLabel.setBounds( 15 h + charH - charIcon[0].getIconWidth() / 2, 16 v + charV - charIcon[0].getIconHeight() / 2, 17 charIcon[0].getIconWidth(), 18 charIcon[0].getIconHeight() 19 ); 20 }

投稿2015/12/04 10:25

otftrough

総合スコア476

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

キャラクター画像の中心が座標の基準になっているようです。
Xは幅の1/2, Yは高さの1/2をそれぞれマイナスしてあげれば、上手くいくと思います。

lang

1charLabel.setBounds(h + charH - charIcon[0].getIconWidth() / 2, 2 v + charV - charIcon[0].getIconHeight() / 2, 3 charIcon[0].getIconWidth(), 4 charIcon[0].getIconHeight());

投稿2015/12/04 10:28

argius

総合スコア9390

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

otftrough

2015/12/04 11:50

ありがとうございます。自己解決でしたが同じ答えが出ました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問