Премини към съдържанието
Форумът в приложение

По-лесно сърфиране. Научи повече.

Kaldata.com - Форуми

Приложение на форума на цял екран с push известия, значки и други.

За да инсталирате това приложение на iOS и iPadOS
  1. Докоснете Иконата за споделяне в Safari
  2. Превъртете менюто и докоснете Добавяне към началния екран.
  3. Докоснете Добавяне в горния десен ъгъл.
За да инсталирате това приложение на Android
  1. Докоснете менюто с 3 точки (⋮) в горния десен ъгъл на браузъра.
  2. Докоснете Добавяне към началния екран или Инсталиране на приложение.
  3. Потвърдете, като докоснете Инсталиране.

Добре дошли!

Добре дошли в нашите форуми, пълни с полезна информация. Имате проблем с компютъра или телефона си? Публикувайте нова тема и ще намерите решение на всичките си проблеми. Общувайте свободно и открийте безброй нови приятели.

Моля, регистрирайте се за да публикувате тема и да получите пълен достъп до всички функции.

 

Гейм лууп

Featured Replies

Здравейте,

Тъй като предишният ми пост беше блокиран защото съм написал не както трябва заглавието създавам нов с по-добро име.Извинявам се предварително, че съм написал кода така и ще съм благодарен ако някой ми обясни как да сложа като другите в "прозорец"

Вече от половин година пиша на Java и съм направил някоя друга игричка, но има някои неща, които не се обясняват добре и не са ми ясни.Казват, че просто така се пишело, но ще ми е от полза ако някой може да ми обясни подробно това, което ще напиша какво прави.

 

package com.realtutsgml.src;
 
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
 
import javax.swing.JPanel;
import javax.swing.Timer;
 
public class Game extends JPanel implements ActionListener{
 
private static final long serialVersionUID = 1L;
Timer gamelooptimer;
 
public Game(){
 
setFocusable(true);
gamelooptimer = new Timer(10,this);
gamelooptime.start();
}
 
public void paint(Graphics g){
 
Graphics2D g2d = (Graphics2D) g;
 
}
@Override
public void actionPerformed(ActionEvent e) {
repaint();
 
}
}

Редактирано от zOFFgam (преглед на промените)

Здравейте !
 
Кода, в този си формат прави абсолютно нищо.
 
 

Здравейте,
Тъй като предишният ми пост беше блокиран защото съм написал не както трябва заглавието създавам нов с по-добро име.Извинявам се предварително, че съм написал кода така и ще съм благодарен ако някой ми обясни как да сложа като другите в "прозорец"
Вече от половин година пиша на Java и съм направил някоя друга игричка, но има някои неща, които не се обясняват добре и не са ми ясни.Казват, че просто така се пишело, но ще ми е от полза ако някой може да ми обясни подробно това, което ще напиша какво прави.

 

Прилагам inline коментарите с разяснения:

package com.realtutsgml.src;

import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JPanel;
import javax.swing.Timer;
//До тук са стандартни истории

public class Game extends JPanel implements ActionListener {
	//Създавате клас Game, който е JPanel (т.е. swing UI елемент, който може да се поставя във фреймове.
	//Правите и класа си ActionListener, което значи, че ще може да му закачате/абонирате action-и

	private static final long serialVersionUID = 1L;
	//Таймера си е ясен - през определено време извиква даден action/event, който се изпълнява.
	Timer gamelooptimer;

	public Game() {

		//Дава се възможност на панела да бъде фокусиран (с Tab или клик)
		setFocusable(true);
		//Създаване и стартиране на таймера - на 10 милисекунди ще вика метода actionPerformed на текущия обект.
		gamelooptimer = new Timer(10, this);
		gamelooptimer.start();
	}
	
	//Предефиниране на метода paint() - той се вика при изчертаване на елемента и в други случаи, описани в документацията му.
	public void paint(Graphics g) {
        //Кастваме graphics обекта (този, чрез който можем да изчертаваме елементи върху текущия панел) към 2D графичен обект.
		Graphics2D g2d = (Graphics2D) g;
		// И ... нищо не изчертаваме ...
	}

	@Override
	public void actionPerformed(ActionEvent e) {
		//repaint се вика, когато елемента вече е показан и ние трябва експлицитно да го преизчертаем.
		//repaint() вътрешно изиква paint().
		repaint();

	}
}


Това нещо не се визуализира, не се и изпълнява (няма main метод).

 

Прилагам примерче с малко попроменен код, който да представи нагледно как се работи със swing:

package com.realtutsgml.src;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JPanel;
import javax.swing.Timer;

public class Game extends JPanel implements ActionListener {
	
	private int width = 20, height = 20, x = 20, y = 20;

	private static final long serialVersionUID = 1L;
	Timer gamelooptimer;

	public Game() {
		setFocusable(true);
		gamelooptimer = new Timer(500, this);
		gamelooptimer.start();
	}

	public void paint(Graphics g) {
		Graphics2D g2d = (Graphics2D) g;
                g2d.clearRect(x, y, width, height);
		x+=10;
		y+=10;
		g2d.setColor(Color.BLUE);
		g2d.fillOval(x, y, width, height);
		
	}

	@Override
	public void actionPerformed(ActionEvent e) {
		if (x < 400 && y < 400) {
			repaint();
		}
	}
}

И съответно един Main class, който да създава, изпълнява и визуализира примера и програмата:

package com.realtutsgml.src;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Rectangle;

import javax.swing.JFrame;

public class Main extends JFrame{
	private static final long serialVersionUID = -7979524330042563418L;
	private static final String TITLE = "Some";
	private static final int WINDOW_WIDTH = 800;
	private static final int WINDOW_HEIGHT = 600;
	private Game g;
	
	
	public Main() {
		init();
	}

	private void init() {
		BorderLayout l = new BorderLayout();
                setBackground(Color.WHITE);
		this.setLayout(l);
		setSize(WINDOW_WIDTH, WINDOW_HEIGHT);
		g = new Game();
		g.setBounds(new Rectangle(new Dimension(WINDOW_WIDTH, WINDOW_HEIGHT)));
		this.add(g, BorderLayout.CENTER);
		// Create and set up the window.
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setTitle(TITLE);

		// Display the window.
		this.setVisible(true);
	}
	
	public static void main(String[] args) {
		java.awt.EventQueue.invokeLater(new Runnable() {
			public void run() {
				new Main();
			}
		});
		
	}
}

Поздрави !

Редактирано от soundtracker (преглед на промените)

Архивирана тема

Темата е твърде стара и е архивирана. Не можете да добавяте нови отговори в нея, но винаги можете да публикувате нова тема, в която да продължи дискусията. Регистрирайте се или влезте във вашия профил за да публикувате нова тема.

Разглеждащи това в момента 0

  • Няма регистрирани потребители разглеждащи тази страница.

Дарение

  • Подкрепи съществуването на форума - направи дарение
    26%
    Дарени 256.00 EUR от нужните 1,000.00 EUR

Бюлетин

Получавайте известие, когато има важна промяна или новина свързана с форума.

Профил

Навигация

Търсене

Търсене

Конфигуриране на push известия в браузъра

Chrome (Android)
  1. Докоснете иконата на катинар до адресната лента.
  2. Докоснете Разрешения → Известия.
  3. Променете предпочитанията си.
Chrome (Desktop)
  1. Кликнете върху иконата на катинар в адресната лента.
  2. Изберете Настройки на сайта.
  3. Намерете Известия и коригирайте предпочитанията си.