Portal > Foren > Java > Allgemeine Java-Programmierung > Ein Anfänger braucht Hilfe
Antwort
 
Themen-Optionen
Alt 18.07.2004, 14:02 Nach oben    #1
Fridolin
Gast
 
Beiträge: n/a
Standard Ein Anfänger braucht Hilfe

Hallo,
ich hab mich heute bei euch angemeldet um es euch zu ermöglichen mir eine frage zu beantworten! Ich versuch gerade ein spiel zu machen. Mein Problem ist das ich eine Kugel (Die Figur) auf einem Hintergrund bewegen muss ohne das dabei Schlieren entstehen weil die update methode nochmal die Kugel mit anderen Koordinaten auf den Hintergrund malt. Ich dachte repaint ruft update auf um den Hintergrund zu löschen und neu zu zeichnen. In einem anderen Forum hat mir ein user gesagt ich soll BufferedImage verwenden und auf ein Graphics2D mit der methode createGraphics zeichnen nur weiß ich dann nimmer wie ich das graphics2D anzeigen soll. Damit ich dann nicht wieder dasselbe Problem habe müsste ich ja dann einmal den Hintergrund abspeichern, in der paint anzeigen und in update auch fortwährend anzeigen lassen und immer neue graphikmethoden(mit anders gesetzten Koordinaten) auf dem BufferedImage aufrufen. Also ein Image zeichnet man mit drawImage. Wie zeichnet man seinen Graphics2D Kontext den man mit createGraphics erzeugt(auf den Bildschirm nicht beschreiben)? Wie gibt man das Graphics2D an das BufferedImage zurück(zum speichern des Hintergrunds)? Wer kann mir helfen?

lg Fridolin

P.S.: Ihr dürft euch duellieren, wer die schnellere Antwort hat!
Java Code:
  1. import java.awt.event.*;
  2. import java.awt.Graphics2D;
  3. import java.awt.Color;
  4. import java.awt.Graphics;
  5. import java.io.BufferedReader;
  6. import java.io.File;
  7. import java.io.FileReader;
  8. import java.io.IOException;
  9. import java.io.StreamTokenizer;
  10.  
  11. import javax.swing.JFrame;
  12.  
  13. public class VersuchPacman extends JFrame
  14. {
  15.     private Graphics dbg;
  16.     StreamTokenizer tokenizer;
  17.     BufferedReader in;
  18.     String board[][] = new String[19][42];
  19.     int count1 = 0;
  20.     int count2 = 0;
  21.     int boardx = 30;
  22.     int boardy = 30;
  23.     int blocksizex = 7;
  24.     int blocksizey = 15;
  25.     int token;
  26.     int i = 1;
  27.     int nflag = 0;
  28.     int xspeed = 0;
  29.     int yspeed = 0;
  30.     int boardx2;
  31.     int boardy2;
  32.    
  33. public VersuchPacman()
  34. {
  35.     this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
  36.     this.setFocusable(true);
  37.     this.requestFocusInWindow();
  38.     this.addKeyListener(new KeyAdapter()
  39.     {
  40.         public void keyPressed(KeyEvent e)
  41.         {
  42.             int key = e.getKeyCode();
  43.             if(key == KeyEvent.VK_LEFT)
  44.             {
  45.             xspeed = -1;
  46.             yspeed = 0;
  47.             }
  48.            
  49.             else if(key == KeyEvent.VK_RIGHT)
  50.             {
  51.             xspeed = 1;
  52.             yspeed = 0;
  53.             }
  54.            
  55.             else if(key == KeyEvent.VK_UP)
  56.             {
  57.             xspeed = 0;
  58.             yspeed = -1;
  59.             }
  60.            
  61.             else if(key == KeyEvent.VK_DOWN)
  62.             {
  63.             xspeed = 0;
  64.             yspeed = 1;
  65.             }
  66.            
  67.             if(key == KeyEvent.VK_SPACE)
  68.             {
  69.             xspeed = 0;
  70.             yspeed = 0;
  71.             }
  72.         }
  73.     });
  74.    
  75.     new Thread()
  76.     {
  77.         public void run()
  78.         {
  79.             while(true)
  80.             {
  81.             repaint();
  82.             try
  83.                 {
  84.                 Thread.sleep(10);
  85.                 }
  86.                 catch(InterruptedException e) { }
  87.             }
  88.         }
  89.     }.start();
  90. }
  91.  
  92. public void loadAndPaint()
  93. {
  94.          try
  95.             {
  96.             in = new BufferedReader(new FileReader(new File(
  97.             "C:\\Programme\\Xinox Software\\JCreator LE\\MyProjects\\VersuchPacman\\Readme\\Kopie von Mappe.txt")));
  98.             tokenizer = new StreamTokenizer(in);
  99.             tokenizer.wordChars('c', 'c');
  100.             tokenizer.wordChars('w', 'w');
  101.             tokenizer.wordChars('n', 'n');
  102.             tokenizer.wordChars('s', 's');
  103.             tokenizer.wordChars('e', 'e');
  104.             tokenizer.whitespaceChars(' ',' ');
  105.             tokenizer.eolIsSignificant(true);
  106.             tokenizer.slashStarComments(true);
  107.             tokenizer.slashSlashComments(true);
  108.            
  109. while ((token = tokenizer.nextToken()) != StreamTokenizer.TT_EOF)
  110. {
  111.  
  112. switch (token)
  113. {
  114.       case StreamTokenizer.TT_WORD
  115.             board[count1][count2] = tokenizer.sval;
  116.             System.out.println(""+board[count1][count2]+""+i);
  117.             i++;
  118.             count2++;
  119.             break;
  120.  
  121.       case StreamTokenizer.TT_EOL:
  122.             count1++;
  123.             count2 = 0;
  124.             break;
  125. }
  126.  
  127. }
  128.             count1 = 0;
  129.             count2 = 0;
  130.        
  131.  for(count1 = 0; count1 <= 18; count1++)
  132.  {
  133.     
  134.  if(count1 != 0)
  135.  {
  136.  boardy+=blocksizey;
  137.  boardx = 30;
  138.  }
  139.  
  140.     for(count2 = 0; count2 <= 41; count2++)
  141.     {
  142.            
  143.     if(board[count1][count2].equals("n"))
  144.     {
  145.  
  146.     if(dbg == null)
  147.     {
  148.     dbg = getGraphics();
  149.     }
  150.     dbg.setColor(Color.blue);
  151.     nflag = 0;
  152.     }
  153.        
  154.     else if(board[count1][count2].equals("w"))
  155.     {
  156.    
  157.     if(dbg == null)
  158.     {
  159.     dbg = getGraphics();
  160.     }        
  161.     dbg.setColor(Color.black);
  162.     nflag = 0;   
  163.     }
  164.                
  165.     else if(board[count1][count2].equals("c"))
  166.     {
  167.      
  168.     if(dbg == null)
  169.     {
  170.     dbg = getGraphics();
  171.     }        
  172.     dbg.setColor(Color.blue);
  173.     nflag = 3;   
  174.     }
  175.                
  176.     else if(board[count1][count2].equals("s"))
  177.     {
  178.      
  179.     if(dbg == null)
  180.     {
  181.     dbg = getGraphics();
  182.     }     
  183.     dbg.setColor(Color.blue);
  184.     nflag = 2;
  185.     }
  186.                
  187.     else if(board[count1][count2].equals("e"))
  188.     {
  189.      
  190.     if(dbg == null)
  191.     {
  192.     dbg = getGraphics();
  193.     }        
  194.     dbg.setColor(Color.blue);
  195.     nflag = 1;
  196.     }
  197.                
  198.     else if(board[count1][count2].equals("g"))
  199.     {
  200.        
  201.     if(dbg == null)
  202.     {
  203.     dbg = getGraphics();
  204.     }
  205.     dbg.setColor(Color.blue);
  206.     nflag = 4;
  207.     }
  208.        
  209.     paint(dbg);
  210.     boardx+=blocksizex; 
  211.             }   
  212.         }   
  213.     }
  214. catch (IOException e) { }
  215. }
  216.  
  217.     public void paint(Graphics g)
  218.     {
  219.         if(nflag == 0)
  220.         {
  221.         g.drawRect(boardx,boardy,blocksizex,blocksizey);
  222.         g.fillRect(boardx,boardy,blocksizex,blocksizey);
  223.         }
  224.        
  225.         else if(nflag == 1)
  226.         {
  227.         g.drawRect(boardx,boardy,blocksizex,blocksizey);
  228.         g.fillRect(boardx,boardy,blocksizex,blocksizey);
  229.         g.setColor(Color.red);
  230.         g.drawArc(boardx,boardy + 4, 7, 7, 0, -340);
  231.         }
  232.        
  233.         else if(nflag == 2)
  234.         {
  235.         g.drawRect(boardx,boardy,blocksizex,blocksizey);
  236.         g.fillRect(boardx,boardy,blocksizex,blocksizey);
  237.         g.setColor(Color.pink);
  238.         g.drawOval(boardx + 1,boardy + 3,blocksizex - 2,blocksizey - 6);
  239.         g.fillOval(boardx + 1,boardy + 3,blocksizex - 2,blocksizey - 6);
  240.         }
  241.        
  242.         else if(nflag == 3)
  243.         {
  244.         g.drawRect(boardx,boardy,blocksizex,blocksizey);
  245.         g.fillRect(boardx,boardy,blocksizex,blocksizey);
  246.         g.setColor(Color.white);
  247.         g.drawOval(boardx + 1,boardy + 4,blocksizex - 2,blocksizey - 8);
  248.         g.fillOval(boardx + 1,boardy + 4,blocksizex - 2,blocksizey - 8);
  249.         }
  250.        
  251.         else if(nflag == 4)
  252.         {
  253.         g.drawRect(boardx,boardy,blocksizex,blocksizey);
  254.         g.fillRect(boardx,boardy,blocksizex,blocksizey);
  255.         g.setColor(Color.yellow);
  256.         g.drawArc(boardx,boardy + 4, 7, 7, 0, -340);
  257.         boardx2 = boardx;
  258.         boardy2 = boardy;
  259.         g.fillArc(boardx,boardy + 4, 7, 7, 0, -340);
  260.         }         
  261.     }
  262.    
  263.     public void update(Graphics g)
  264.     {
  265.             nflag = 5;
  266.             boardx2+=xspeed;
  267.             boardy2+=yspeed;
  268.             g.setColor(Color.yellow);
  269.             g.drawArc(boardx2,boardy2 + 4, 7, 7, 0, -340);
  270.             g.fillArc(boardx2,boardy2 + 4, 7, 7, 0, -340);
  271.     }
  272.    
  273.     public static void main(String args[])
  274.     {
  275.     VersuchPacman neu = new VersuchPacman();
  276.     neu.setSize(356,325);
  277.     neu.setLocation(100,100);
  278.     neu.setVisible(true);
  279.     neu.loadAndPaint();
  280.     /*image = new BufferedImage(getSize().width,getSize().height,BufferedImage.TYPE_INT_ARGB);
  281.     graphics = image.createGraphics();
  282.     graphics.setColor(getBackground());
  283.     graphics.fillRect(0,0,getSize().width,getSize().height);
  284.     graphics.setColor(getForeground());
  285.     g.drawImage(image,0,0,this);*/
  286.     }
  287. }
 
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 18.07.2004, 15:53 Nach oben    #2
Neuer Benutzer
 
Registriert seit: 26.05.2004
Beiträge: 21
Standard

da fehlt aber mindestens die datei von der karte, sonst kann ich das nicht ausführen, oder fehlen noch bilder?
Asraniel ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 18.07.2004, 16:01 Nach oben    #3
Fridolin
Gast
 
Beiträge: n/a
Standard

Ich dachte die hätte ich angefügt naja hier ist sie so kopieren und pfad und namensangaben ändern

Anmerkung: Es müssen genau 19 zeilen und 42 zeichen pro zeile mit abstand sein
und 18 zeilenumbrüche

lg Fridolin

Code:
n s n n c n w w w n c n n c n n c n n c n n c n w w w n c n n c n n c n w w w n s n
w w w n c n w w w n c n w w w n c n w w w n c n w w w n c n w w w n c n w w w n c n
w w w n c n w w w n c n n c n n c n w w w n c n w w w n c n w w w n c n w w w n c n
n c n n c n n c n n c n w w w n c n n c n n c n n c n n c n n c n n c n n c n n c n
n c n w w w w w w n c n w w w n c n w w w n c n w w w w w w w w w n c n w w w n c n
n c n w w w w w w n c n w w w n c n w w w n c n n n n n e n n n n n c n w w w n c n
n c n w w w w w w n c n w w w n c n w w w n c n w w w n e n w w w n c n w w w n c n
n c n n c n n c n n c n w w w n c n n c n n c n w w w n e n w w w n c n n c n n c n
n c n w w w w w w n c n w w w n c n w w w n c n w w w w w w w w w n c n w w w n c n
n c n w w w w w w n c n w w w n c n n c n n c n n c n w w w n c n n c n w w w n c n
n c n n c n n c n n c n w w w w w w w w w w w w w w w w w w n c n w w w n c n n c n
n c n w w w w w w n c n w w w n c n n c n n g n n c n n c n n c n w w w n c n w w w
n c n n c n n c n n c n n c n n c n w w w n c n w w w w w w n c n w w w n c n w w w
w w w n c n w w w n c n w w w n c n w w w n c n n c n w w w n c n n c n n c n w w w
w w w n c n w w w n c n w w w n c n w w w w w w n c n w w w n c n w w w n c n w w w
w w w n c n w w w n c n w w w n c n w w w n c n n c n n c n n c n n c n n c n w w w
w w w n c n n c n n c n w w w n c n n c n n c n w w w w w w w w w w w w w w w n c n
w w w n c n w w w n c n w w w n c n w w w n c n n c n n c n n c n n c n n c n n c n
n s n n c n n c n n c n w w w n c n n c n n c n w w w w w w w w w w w w w w w n s n
 
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 18.07.2004, 16:12 Nach oben    #4
Fridolin
Gast
 
Beiträge: n/a
Standard

Achja habt ihr keine Funktion zum Editieren von Beiträgen, die musst du umbedingt noch programmieren! Ich bin übrigens nicht 34 auch wenn das da daneben steht.
 
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten