@pwnsauce

Как зафиксировать предмет в окне??

Всем привет. Делаю игру по типу танчики и возникла проблема. Вот вырисовывается "цель" (крестик), но при изменении диалогового окна она не меняет своего положения относительно карты. Как можно ее зафиксировать на этой белой карте? Буду Вам благодарна, если Вы мне поможете.
hPI0aEFA3nA.jpg6RkQmkoJmX4.jpg
public static void makeWindow(){
		panel = new Game(); 
	    //TerrainFileHandler tfh = panel.new TerrainFileHandler();
		frame.add(panel);
		frame.setTitle("Prototyp 1 / A16B0087P");
		frame.setSize(640, 480);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setLocationRelativeTo(null); 
		frame.setVisible(true);
	}
	
	@Override
	public void paint(Graphics g){
		paint2D((Graphics2D)g);
		kresleniStrelce((Graphics2D)g);
		kresleniCile((Graphics2D)g);
	}
	
	/**
	 * Kresleni do panelu
	 * @param g2  graficky kontext
	 */
	
	//тут вырисовывается эта белая карта и черная обводка
	public void paint2D(Graphics2D g2) {	
		int columns = this.getWidth();
		int rows = columns/2;
		if (rows > this.getHeight()){
			rows = this.getHeight();
			columns = 2*rows;
			
		}
		
		//karta (bely pryamoug.)
		g2.setColor(Color.WHITE);
		g2.fill(new Rectangle2D.Float(10, 10, columns-20, rows-12));
		//obvodka
		g2.setColor(Color.BLACK);
		g2.setStroke(new BasicStroke(1));
		g2.draw(new Rectangle2D.Float(10, 10, columns-20, rows-12));
	}
	
	//в этих двух методах находятся стрелок и цель (крестики)
	public static void kresleniStrelce(Graphics2D g2) {	
		g2.translate(shooter.x+50, 50+shooter.y);
		g2.setColor(shooter.color);
		g2.draw(new Line2D.Double(0, -5, 0, 5));
		g2.draw(new Line2D.Double(-5, 0, 5, 0));
	}
	public static void kresleniCile(Graphics2D g2) {	
		g2.translate(target.x+50, 100+target.y);
		g2.setColor(target.color);
		g2.draw(new Line2D.Double(0, -5, 0, 5));
		g2.draw(new Line2D.Double(-5, 0, 5, 0));
	}
  • Вопрос задан
  • 137 просмотров
Решения вопроса 1
GavriKos
@GavriKos
Вообще не силен в рисовании в канве джавы, но попробую предположить.
Перегруженный метод paint у вас перегружен для всего окна, а не для белой панели - вот крестики и привязаны к окну. Обычно если вам нужно рисовать в каком то компоненте - то делается свой компонент-наследник от какого нить Plane, Panel, Button на крайняк, и у него перегружается уже paint. Тогда вся отрисовка будет происходить в рамках этого объекта.

Это что касается выхода за белую область.

Если же вы хотите, чтобы при изменении размера белой области ваши метки всегда оставались в той же ОТНОСИТЕЛЬНОЙ позиции - то и надо считать относительные координаты. Т.е. вместо g2.translate(target.x+50, 100+target.y); должно быть что то вроде g2.translate(0.5*width, 0.5*height);. где 0.5 - относительные координаты, width, height - размеры канвы.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
28 нояб. 2024, в 13:22
1000 руб./за проект
28 нояб. 2024, в 13:00
70000 руб./за проект
28 нояб. 2024, в 12:59
30000 руб./за проект