Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

[Pytanie]2d game


Rekomendowane odpowiedzi

Opublikowano

chciał bym stworzyć grę podobną do terrari (2d game)
ale potrzebuje jakiś dobrych tutków, src
(szukałem ale żadnych dobrych nie znalazłem)

Opublikowano

Przed zabawą z gotowym silnikiem polecam ci napisać jakiś swój (nawet najprostszy) żebyś wiedział jak to działa i z czym to się je. ;)

A jeśli chcesz jakieś src do wzorowania to wchodzisz w google i tam gdzie szukasz Justina Biebera wpisujesz "Java + np. minecraft 2d + GitHub".

2mmtzeu.jpg

Opublikowano

applet czy w JFrame ?

 

Jeden kit lol. To jest komponent i tamto tez.

Co do tego gdzie rysować to też jeden kit bo i tak wszystko prowadzi do tego samego, możesz rysować nawet na JTable jak chcesz (o ile odpowiednio go ustawisz)

Ważne żeby ustawić sobie tzw doublebuffering. Canvas jest o tyle fajny że został do tego stworzony xD Czyli do rysowanie z doublebufferingiem (JPanel też to ma ale ja preferuje Canvas)

W JPanel dajesz new JPanel(true) true/false ustawianie podwójnego buforowania.

A w canvas canvas.createBufferStrategy(liczba_buferów (2)) i pobierasz strategie przez canvas.getBufferStrategy()

 

Rysowanie w javie opiera się na Graphics2D tam masz wiele funkcji rysowania. Oczywiście możesz rysować z jak najmniejszym użyciem powłoki javy ale po co stworzyli w końcu te klasy ;)

Najbardziej prymitywne rysowanie w javie to coś takiego:

 

 

 

final Graphics2D g = (Graphics2D) getBufferStrategy().getDrawGraphics();
if (g instanceof SunGraphics2D) {
if (((SunGraphics2D) g).surfaceData instanceof D3DSurfaceData) {

D3DRenderQueue rq = D3DRenderQueue.getInstance();
rq.lock();
// ;
RenderBuffer buf = rq.getBuffer();
try {
for (int j = 0; j < getWidth(); j++) {
for (int l = 0; l < getHeight(); l++) {
rq.ensureCapacity(8);
buf.putInt(BufferedOpCodes.SET_COLOR);
buf.putInt(random.nextInt(255) * random.nextInt(255) * random.nextInt(255));
rq.ensureCapacity(12);
buf.putInt(BufferedOpCodes.DRAW_PIXEL);
buf.putInt(j);
buf.putInt(l);
}

}

} finally {
rq.unlock();
}
// buf.putInt(BufferedOpCodes.SET_COLOR);
// buf.putInt(Color.WHITE.getRGB());
} else if (((SunGraphics2D) g).surfaceData instanceof OGLSurfaceData) {
OGLRenderQueue rq = OGLRenderQueue.getInstance();
RenderBuffer buf = rq.getBuffer();
rq.lock();
// ;
try {
for (int j = 0; j < getWidth(); j++) {
for (int l = 0; l < getHeight(); l++) {
rq.ensureCapacity(8);
buf.putInt(BufferedOpCodes.SET_COLOR);
buf.putInt(random.nextInt(255) * random.nextInt(255) * random.nextInt(255));
rq.ensureCapacity(12);
buf.putInt(BufferedOpCodes.DRAW_PIXEL);
buf.putInt(j);
buf.putInt(l);
((SunGraphics2D) g).surfaceData.markDirty();

}

}

} finally {
rq.unlock();
}
}


}

g.setColor(Color.WHITE);
g.drawString("Hohoho", 0, 10);
g.dispose();
http://hg.openjdk.java.net/jdk7/hotspot/jdk/file/75755e92430c/src/windows/native/sun/java2d/d3d/D3DRenderQueue.cpp
Opublikowano

czemu nie wczytuje obrazka ?

TarreriaFrame.java

package Tarreria.Main;

import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.WindowConstants;

import Tarreria.Tasks.MainTask;

public class TarreriaFrame extends JFrame {
    private static final long serialVersionUID = 1L;
    public static JButton ButtonStart = new JButton("Start");
    public static MainTask a = new MainTask();
    public static Image ImageTarreria;  
    public static ImageIcon ii;
    
    public static void main(String[] args) {
        JFrame frame = buildFrame();
        
        ImageTarreria = Toolkit.getDefaultToolkit().getImage("Tarreria/IMG/Tarreria.png");
        ii=new ImageIcon(ImageTarreria);
    }
    
    private static JFrame buildFrame() {
        JFrame frame = new JFrame("Tarreria");
        frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        frame.setLayout(null);
        frame.setSize(850, 500);
        frame.setLocation(350, 200);
        frame.setVisible(true);
        frame.setResizable(false);
        ButtonStart.setBounds(340, 400, 150, 50);
        frame.add(ButtonStart);
        return frame;
    }
    
    public void paint(Graphics g) {
        g.drawImage(ImageTarreria,a.cX,a.dY,this);
        this.setLayout(null);
    }
}

MainTask.java

package Tarreria.Tasks;

import java.util.TimerTask;

public class MainTask extends TimerTask{
    
    public static int cX = 100;
    public static int dY = 10;
    int e = 1;
    int f = 0;
    
    @Override
    public void run() {
        switch(e) {
        case 1:
            
        cX++;
        f++;
        
        if(f == 100) {
            f = 0;
            e = 2;
        }
        
        break;
        
        case 2:
            
            cX--;
            f++;
            
            if(f == 100) {
                f = 0;
                e = 1;
            }
            
            break;
        }
    }
}

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...