こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

多角形を動かす範囲を設定したいのですが…。

多角形をKeyListenerで動かす範囲を設定
したいのですがどうすればいいでしょうか。
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Polygon;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

import javax.swing.JFrame;
import javax.swing.JPanel;

public class JavaGame2 {
public static void main(String age[]) {
JFrame frame = new JFrame();
frame.setTitle("テスト");
frame.setSize(400, 400);
frame.setLocation(1000, 200);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

MyPanel panel = new MyPanel();
frame.add(panel);

frame.setVisible(true);
}
}
class MyPanel extends JPanel implements KeyListener{
private Ziki ziki;
public MyPanel() {
setBackground(Color.black);
ziki = new Ziki();
addKeyListener(this);
setFocusable(true);
}

protected void paintComponent(Graphics g) {
super.paintComponent(g);
ziki.draw(g);
}
public void keyPressed(KeyEvent e) {
int key = e.getKeyCode();
switch(key) {
case KeyEvent.VK_UP : ziki.moveUpZiki(); break;
case KeyEvent.VK_RIGHT :ziki.moveRightZiki(); break;
case KeyEvent.VK_DOWN : ziki.moveDownZiki(); break;
case KeyEvent.VK_LEFT : ziki.moveLeftZiki(); break;
}repaint();
}
public void keyReleased(KeyEvent e){}

public void keyTyped(KeyEvent e){}
}

class Ziki {
private Polygon p;
public Ziki() {
int[] xpoints = {240,260,250};
int[] ypoints = {260,260,240};
p = new Polygon(xpoints,ypoints,xpoints.length);
}
void draw(Graphics g) {
g.fillPolygon(p);
}
public void moveLeftZiki() {
for (int i=0; i < p.xpoints.length; i++ ) {
p.xpoints[i] -= 5;
}
}
public void moveRightZiki() {
for (int i=0; i < p.xpoints.length; i++ ) {
p.xpoints[i] +=5;
}
}
public void moveUpZiki() {
for (int i=0; i < p.ypoints.length; i++ ) {
p.ypoints[i] -= 5;
}
}
public void moveDownZiki() {
for (int i=0; i < p.ypoints.length; i++ ) {
p.ypoints[i] += 5;
}
}
}

投稿日時 - 2014-04-23 23:35:12

QNo.8566487

困ってます

質問者が選んだベストアンサー

例えば、p.xpoints[0]の左端を100以上にしたいなら、

public void moveLeftZiki() {
if (p.xpoints[0] >= 105) {
for (int i=0; i < p.xpoints.length; i++ ) {
p.xpoints[i] -= 5;
}
}
}

動かす範囲が矩形ならこんな感じですが、矩形以外ならもう少し複雑な計算が必要です。

投稿日時 - 2014-04-24 04:47:24

ANo.1

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問