kleines Spielchen proggen

Status
Nicht offen für weitere Antworten.

SBehnen27

Aktives Mitglied
hi.
Ich überlege gerade, ob ich mich mal dran setze, ein kleines spielchen zu proggen.
damit ihr nachher sinngemäß antworten könnt hier erstmal, was ich mir ca. vorstelle:

das 2D (!!) spielfeld hat eine grösse von 800x600
es soll ein flugzeugspiel werden. Das spielfeld schliesst links und rechts an sich selbst an (wer links rausfliegt, kommt rechts wieder an)
nach oben kann man auch rausfliegen, man sieht sich dann aber nicht mehr.

was ich damit sagen will: der hintergrund bewegt sich nicht.

das flugzeug ist nur ein bild mit transparentem hintergrund und ist nur aus einer einzigen perspektive (seite) zu sehen.

als tasten gibt es nur hoch runter, links rechts und Space um den motor ztu starten.

-------------------------------------------------
So viel dazu.
womit muss ich mich jetzt auseinander setzen, um soetwas zu realisieren?
reicht da ne GUI mit swing komponenten?
z.b. ein label mit einem imageicon (flugzeug), dessen koords ich einfach in einem thread entsprechend der geschwindigkeit verändere? oder muss ich für sowas schon directX verwenden?

Gut weiterhelfen würden mit ein paar stichworte.
Danke
 
J

JRoar

Gast
wozu swing? warum wolle nalle swing für ihre spiele? nimm awt. ist schneller und ich glaub kau mdass du ne komplexe JTable doer so in deinem spiel brauchst.

rofl? directx fürn 2d spiel mit 2 bildern? dein flugzeug malst du einfach so mit paint auf dein spielfeld.
 

SBehnen27

Aktives Mitglied
gut. dann nehm ich awt =D

directX hatte ich gedacht, weil ich bei java hier und da ein flackern in neu gezeichneten bildern feststelle...

ach ja: muss ich etwas beachten, wenn ich auf 1 server 3 clients kommen lasse, oder funzt das genauso wie mit 1 server - 1 client?
 

Illuvatar

Top Contributor
Also nimm nen Frame überschreib paint und damit hat sichs. Das Flackern kommt von der bei AWT fehlenden Doppelpufferung. Siehe hier:
http://www.java-forum.org/de/javabuch/html/k100226.html#sectlevel4id034002004003

Edit: Grml was klick ich absenden wenn ich net fertig bin:

Zu den Clients: Das kommt darauf an, wie du es mit einem CLient machst. Theoretisch sollte derselbe Code (Thread-Endlosschleife-accept-Client-Vector) sowohl für 1 als auch für mehrere Clients tun.
 

SBehnen27

Aktives Mitglied
hm. wie viel langsamer ist Swing gegenüber AWT?

ich stosse mit Awt jetzt schon wieder auf die selben probleme, die ich am anfang auch mit Swing hatte. hab keinen bock, das noch mal mitzumachen ^^
schaffe es nicht, nen HG in den contentpane zu packen: this.getContentPane().add(HG) // HG ist mein Bild
 

SBehnen27

Aktives Mitglied
hm.
hab nen kleines problem mit "einfach zeichnen"

folgender aufbau:

ich erzeuge innerhalb des spielfeldes auch die flieger:
hier gehts los (main):
Code:
Spielfeld Playground = new Spielfeld(this, false, this);
Playground.setBounds(200,200, 805,630);
Playground.setVisible(true);

Spielfeld:
Code:
/*
 * Spielfeld.java
 *
 * Created on 1. April 2005, 17:12
 */

package dogfight;

/**
 *
 * @author  Administrator
 */
public class Spielfeld extends java.awt.Dialog {
    
    private Flugzeug[] Flieger;
    private static Hauptmenue derFrame;
    /** Creates new form Spielfeld */
    public Spielfeld(java.awt.Frame parent, boolean modal, Hauptmenue derFrame) {
        super(parent, modal);
        initComponents();
        this.derFrame = derFrame;
        ContentPane HG = new ContentPane();
        HG.loadImage("images/Playground.png",800,600);
        this.add(HG);
        HG.setBounds(0,0,800,600); 
        erzeugeFlieger();
    }
    public void erzeugeFlieger(){
        Flieger = new Flugzeug[4];
        Flieger[0]= new Flugzeug(derFrame, this, "rot",0,0);
        Flieger[1]= new Flugzeug(derFrame, this, "blau",0,1);
        Flieger[2]= new Flugzeug(derFrame, this, "gelb",0,2);
        Flieger[3]= new Flugzeug(derFrame, this, "gruen",0,3);
        //--------------------------------------------------
        // Das hier hat (natürlich) auch nicht geklappt. war aber verzweifelt ^^
        //add(Flieger[0]); Flieger[0].setBounds(80,550,60,60);
        //add(Flieger[1]); Flieger[1].setBounds(290,550,60,60);
        //add(Flieger[2]); Flieger[2].setBounds(490,550,60,60);
        //add(Flieger[3]); Flieger[3].setBounds(700,550,60,60);
    }
    
    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    private void initComponents() {
        rot = new java.awt.Label();
        blau = new java.awt.Label();
        gelb = new java.awt.Label();
        gruen = new java.awt.Label();

        setLayout(null);

        addWindowListener(new java.awt.event.WindowAdapter() {
            public void windowClosing(java.awt.event.WindowEvent evt) {
                closeDialog(evt);
            }
        });

        add(rot);
        rot.setBounds(80, 550, 60, 60);

        add(blau);
        blau.setBounds(290, 550, 60, 60);

        add(gelb);
        gelb.setBounds(490, 550, 60, 60);

        add(gruen);
        gruen.setBounds(700, 550, 60, 60);

        pack();
    }
    
    private void closeDialog(java.awt.event.WindowEvent evt) {                             
        setVisible(false);
        dispose();
    }                            
    
    private java.awt.Label blau;
    private java.awt.Label gelb;
    private java.awt.Label gruen;
    private java.awt.Label rot;
    // End of variables declaration
    
}

klasse flugzeug:
Code:
package dogfight;
import java.awt.*;
import java.awt.Image.*;
import java.awt.Graphics;
import java.awt.Graphics2D; 
import java.awt.event.*; 
import java.net.*;
import java.io.*;
/**
 *
 * @author Administrator
 */
public class Flugzeug extends Canvas implements Serializable{
    private String name;
    private int posX = 0;
    private int posY = 0;
    private int richtung = 0;
    private int geschwindigkeit = 0;
    private boolean aktiv = true;
    private Schuss shot;
    private String farbe;
    private int id;
    private String imgPath = "images/"+farbe+"/"+richtung+".gif";
    private Image bild;
    private static Hauptmenue derFrame;
    private static Spielfeld Playground;
    /** Creates a new instance of Flugzeug */
    public Flugzeug(Hauptmenue derFrame, Spielfeld Playground, String farbe, int richtung, int id) {
        this.derFrame = derFrame;
        this.Playground = Playground;
        this.farbe = farbe;
        this.id = id;
        this.richtung = richtung;
        setImg();
    }
    public boolean getAktiv(){
        return aktiv;
    }
    public int getPosX(){
        return posX;
    }
    public int getPosY(){
        return posY;
    }
    public int getRichtung(){
        return richtung;
    }
    public int getGeschwindigkeit(){
        return geschwindigkeit;
    }
    public String getName(){
        return name;
    }
    public String getImg(){
        return imgPath; 
    }
    public void setImg(){
        imgPath = "images/"+farbe+"/"+richtung+".gif"; 
    }
    public void setRichtung(int i){
        richtung = i; 
    }
    public void shoot(){
        shot = new Schuss(this, derFrame);
        Thread T = new Thread(shot);
        T.start();
    }
    
    public void fliegen(){
        Bewegung Flug = new Bewegung();
        Thread T = new Thread(Flug);
        T.start();
    }
    
private class Bewegung implements Runnable{
    public Bewegung(){

    }
    public void run() {
        try{
                //hier kommt die bewegung des fliegers
        }
        catch(Exception e){

        }
    }
}
    public void paint(Graphics g){
        bild = Toolkit.getDefaultToolkit().getImage(imgPath);
        g.drawImage(bild, 0, 0, this);
    }
}


ich habe versucht, die bilder in JLables zu malen. aber da gibts 2 probleme:
1. der HG der flieger soll transparent sein, ist es aber nicht.
2. ich möchte nun tatsächlich AWT und nicht Swing nutzen.

in die AWT Lables kann ich anscheinend keine grafiken adden.

wie ist das "einfach zeichnen" gemeint? wie würdet ihr die Flugzeuge anzeigen?
 

Illuvatar

Top Contributor
Kannst du machen wie du willst, aber ich würd ein Fenster nehmen, paint überschreiben, den Hintergrund da zeichnen (1 LOC) und überall wo ein Flugi sein soll (Vector) ein Flugibild zeichnen (3 LOC).
Aber ansonsten brauchst du wohl doch Swing, weil du da setOpaque (false) machen kannst (wenns aus JComponent abgeletet is) dann isses durchsichtig.
 

SBehnen27

Aktives Mitglied
das mit der durchsichtigkeit war schon mal mein problem. da hat mir das opaque auch nicht weitergeholfen. der (laut GIF transparente) Hintergrund des Bildes wird als weiss gemalt.

n kumpel von mir hat mal einfach seine bilder als imageicons dargestellt. da hat das mit der transparenz ohne probleme geklappt, was ich hier mit paint ned schaffe ;(
ich bin irgendwie verwundert, dass es so schwer ist, transparenz von gif dateien darzustellen ;()
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
M kleines KI Programm Idee Allgemeine Java-Themen 7
S Unerwarteter Output (kleines Raetsel) Allgemeine Java-Themen 6
G Kleines Projekt Allgemeine Java-Themen 2
I Methoden Schnelle Hilfe benötigt - Kleines Video/Slideshow aus mehreren Bildern erstellen Allgemeine Java-Themen 3
N Kleines GUI/Sortier Projekt für die Uni Allgemeine Java-Themen 11
V Kleines Regex-Problem Allgemeine Java-Themen 3
I kleines Wochenlohn-Programm schreiben Allgemeine Java-Themen 5
F Kleines Problem mit exec Allgemeine Java-Themen 14
C Architekturvorschläge für kleines Projekt Allgemeine Java-Themen 2
S wiedermal ein kleines Problem mit BigDecimal Allgemeine Java-Themen 5
R Kleines Ratespiel Allgemeine Java-Themen 14
N Kleines nicht java Problem Allgemeine Java-Themen 7
F kleines regexp Problem. Allgemeine Java-Themen 3
_SeiA_ Hilfe Kleines Java Programm schreiben. Summen. Allgemeine Java-Themen 3
G von großem Panel auf ein kleines Panel mappen Allgemeine Java-Themen 6
S kleines File problem Allgemeine Java-Themen 13
M kleines prob mit JInternalFrame Allgemeine Java-Themen 5
J Kleines Tool in Java erstellen? Allgemeine Java-Themen 20
B Lizenz und kleines Programm. Allgemeine Java-Themen 3
B kleines modales transparents Fenster ohne rahmen und buttons Allgemeine Java-Themen 15
P Hab ein kleines Problem mit fehlenden Pointern. Allgemeine Java-Themen 4
S Kleines Eclipse Problem, große Wirkung Allgemeine Java-Themen 7
P Habe ein kleines Problem Allgemeine Java-Themen 2
G mit Pattern strings filtern ein kleines problemchen ;) Allgemeine Java-Themen 2
W Kleines Applet in Standard Java Applikation umwandeln Allgemeine Java-Themen 3
S kleines Konstruktorproblem Allgemeine Java-Themen 3

Ähnliche Java Themen

Neue Themen


Oben