Portal > Foren > Java > Desktop-Applikationen und Grafik > Unerklärliches Problem
Antwort
 
Themen-Optionen Thema durchsuchen
Alt 18.08.2005, 17:42 Nach oben    #1
Neuer Benutzer
 
Benutzerbild von exoskelett
 
Registriert seit: 18.08.2005
Ort: Hildesheim
Beiträge: 14
Standard Unerklärliches Problem

Hi,
ich hab in den letzen vier Tagen einen kleinen Java-Kurs mitgemacht und wir sollten ein kleines Pong-Spiel programmieren. Das Spiel nur mit den Funktionen von paint (also fillRect, fillOval, ..) hat wunderbar funktioniert, aber als ich das Spiel umgeschrieben habe und Canvas benutzt habe, funktionierte komischerweise der keyListener nicht mehr. Das Spiel ist bis auf die Canvas 100% mit dem anderen Programm identisch. Die Leiter des Kurses haben den Fehler auch nicht gefunden. Vielleicht kann mir einer von euch helfen. Danke schonmal im Vorraus!
Hier der Code:

PHP-Code:
import java.awt.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.applet.*;

public class 
Main extends Applet implements RunnableKeyListener {
    
//-----------------------------------------
    
int ballx 375;
    
int bally 275;
    
int y1 247;
    
int y2 247;
    
int xdir 1;
    
int ydir 1;
    
Thread t;
    
Pong1 p1 = new Pong1();
    
Pong2 p2 = new Pong2();
    
Ball ball = new Ball();
    
int punkte1 0;
    
int punkte2 0;
    
//-----------------------------------------
    
public void init() {
        
this.setBackground(Color.black);
        
this.setLayout(null);
        
this.addKeyListener(this);
        
this.setSize(800,600);

        
p1.setBounds(0,247,13,107);
        
p2.setBounds(787,247,13,107);
        
ball.setBounds(ballx,bally,32,32);
        
        
this.add(ball);
        
this.add(p1);
        
this.add(p2);
        
= new Thread(this);
        
t.start();
    }
    
//-----------------------------------------
    
public void start() {}
    public 
void stop() {}
    
//-----------------------------------------
    
public void paint(Graphics g) {
        
g.setColor(Color.WHITE);
        
g.drawString(String.valueOf(punkte1),10,10);
        
g.drawString(String.valueOf(punkte2),765,10);
    }
    
//-----------------------------------------
    
public void run() {
        while(
true) {
            
ballx+=xdir;
            
bally+=ydir;
            if(
ballx==12) {
                if((
y1-16)<bally && (y1+123)>bally) {
                    
xdir 1;
                }
                else {
                    
punkt_gemacht(2);
                }
            }
            if(
ballx==738) {
                if((
y2-16)<bally && (y2+123)>bally) {
                    
xdir = -1;
                }
                else {
                    
punkt_gemacht(1);
                }
            }
            if(
bally==0) {
                
ydir 1;
            }
            if(
bally==568) {
                
ydir = -1;
            }
            
ball.setBounds(ballx,bally,32,32);
            
this.validate();
            
            try {
                
t.sleep(1);
            }
            catch(
Exception e) { }
            
        }
    }
    
//-----------------------------------------
    
public void keyPressed(KeyEvent event) {
        if(
event.getKeyCode()==event.VK_UP) {
            
y2-=15;
            if(
y2<0) {
                
y2+=15;
            }
            
p2.setBounds(768,y2,13,107);
            
this.validate();
        }
        if(
event.getKeyCode()==event.VK_DOWN) {
            
y2+=15;
            if(
y2>600) {
                
y2-=15;
            }
            
p2.setBounds(768,y2,13,107);
            
this.validate();
        }
        if(
event.getKeyCode()==event.VK_SHIFT) {
            
y1-=15;
            if(
y1>600) {
                
y1+=15;
            }
            
p1.setBounds(0,y1,13,107);
            
this.validate();
        }
        if(
event.getKeyCode()==event.VK_CONTROL) {
            
y1+=15;
            if(
y1>600) {
                
y1-=15;
            }
            
p1.setBounds(0,y1,13,107);
            
this.validate();
        }
    }
    
//-----------------------------------------
    
public void keyReleased(KeyEvent event) {}
    public 
void keyTyped(KeyEvent event) {}
    
//-----------------------------------------
    
public void punkt_gemacht(int p) {
        if(
p==1) {
            
punkte1++;
        }
        else {
            
punkte2++;
        }
        
y1 274;
        
y2 274;
        if(
xdir==1) {
            
xdir = -1;
        }
        else {
            
xdir 1;
        }
        if(
ydir==1) {
            
ydir = -1;
        }
        else {
            
ydir 1;
        }
        
ballx 375;
        
bally 275;
        
repaint();
    }

exoskelett ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 18.08.2005, 22:47 Nach oben    #2
Sesselkleber
 
Benutzerbild von sparrow
 
Registriert seit: 17.01.2005
Beiträge: 576
Standard

Wenn du den ganzen code zeigst mach ich mich auf Fehlersuche.
Die Klassen Pong und Ball fehlen noch.

Gruß
Sparrow
sparrow ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 19.08.2005, 11:07 Nach oben    #3
Neuer Benutzer
 
Benutzerbild von exoskelett
 
Registriert seit: 18.08.2005
Ort: Hildesheim
Beiträge: 14
Standard

OK, die anderen Klassen haben zwar nichts mit dem keyListener zu tun, aber hier sind sie:
----------------------------
Pong1:
PHP-Code:
import java.awt.*;

public class 
Pong1 extends Canvas {
    
Image links;
    public 
Pong1() { }
    public 
void paint(Graphics g) {
        
links getToolkit().getImage("pong.png");
        
g.drawImage(links,0,0,this);
    }

----------------------------
Pong2:
PHP-Code:
import java.awt.*;

public class 
Pong2 extends Canvas {
    
Image rechts;
    public 
Pong2() { }
    public 
void paint(Graphics g) {
        
rechts getToolkit().getImage("pong.png");
        
g.drawImage(rechts,0,0,this);
    }

----------------------------
Ball:
PHP-Code:
import java.awt.*;

public class 
Ball extends Canvas {
    
Image ball;
    public 
Ball() {}
    public 
void paint(Graphics g) {
        
ball getToolkit().getImage("ball.PNG");
        
g.drawImage(ball,0,0,this);
    }

Achja, falls es nützlich ist: Ich habs mit NetBeans und mit Eclipse ausprobiert, funktioniert beides nicht.

Und bei debuggen springt er gar nicht zum keyPressed, wenn ich eine Taste drücke, das mein eigendliches Problem.

Danke, dass du nach Fehlern suchst.
exoskelett ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 20.08.2005, 14:54 Nach oben    #4
Neuer Benutzer
 
Benutzerbild von exoskelett
 
Registriert seit: 18.08.2005
Ort: Hildesheim
Beiträge: 14
Standard

Ich hab jetzt zumindest das Problem gefunden:
Nachdem man eine Klasse mit this.add hinzugefügt hat, funktioniert der KeyListener nicht mehr.
Ich weiß nur nicht, wie man das Problem lösen kann.
Hat nicht irgendjemand eine Idee???
exoskelett ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 20.08.2005, 22:09 Nach oben    #5
Projektleiter
 
Registriert seit: 30.11.2005
Ort: Bottrop
Beiträge: 1.110
Standard

Wäre es denkbar, dass eine der neuen Komponenten den Focus bekommt und es deswegen zu Problemen kommt?

Versuche mal, den Canvas-Komponenten ebenfalls einen KeyListener zuzuweisen und dann, wenn ein KeyEvent eintritt, irgendwas in die Konsole zu schreiben.
__________________
Patrick Gotthardts Weblog.
pago ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 21.08.2005, 17:52 Nach oben    #6
Sesselkleber
 
Benutzerbild von sparrow
 
Registriert seit: 17.01.2005
Beiträge: 576
Standard

Tja, ich steh da auch vor einem Rätsel.
Irgendwie werden alle KeyListener lahmgelegt.
Darf man auf einem Applet vielleicht nicht mehrere Canvas haben? Ist bei Handyspielen jedenfalls so.
sparrow ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 21.08.2005, 21:28 Nach oben    #7
Neuer Benutzer
 
Benutzerbild von exoskelett
 
Registriert seit: 18.08.2005
Ort: Hildesheim
Beiträge: 14
Standard

Also daran, dass es mehrere Canvas sind, liegt es nicht, da auch schon bei einem Canvas der KeyListener nicht mehr funktioniert. Das mit dem KeyListener im Canvas hatte ich auch schon probiert, hat nicht geklappt, vielleicht hab ich auch nur was falsch gemacht.
Ich werd noch ein bisschen rumprobieren, vielleicht klappt ja irgendwas.
exoskelett ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Problem E-Mails zu senden Jann Hendrik Plauderecke 7 25.05.2007 21:37
Problem mit den Einschränkungen für SELECT Jann Hendrik Datenbanken 5 03.01.2007 07:17
Logisches Problem beim einsatz von Ereignissen Prophet Allgemeine Java-Programmierung 19 05.06.2006 22:08
Problem mit Cookie und Reloads... Bookworm PHP-Programmierung 10 13.04.2006 12:09
OSX + Eclipse 3.1 Problem bacarni Eclipse 3 29.07.2005 21:19


Alle Zeitangaben in WEZ +2. Es ist jetzt 14:52 Uhr.


Powered by vBulletin® Version 3.7.3 (Deutsch)
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44