Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Работа с графикой / 2 сообщений из 2, страница 1 из 1
06.08.2014, 17:20
    #38714432
nik-mak
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с графикой
Только начал изучать язык и решил написать тенис как на старых телефонах, только с фоном который просто рисует рандомную линию рандомного цвета и так линиями забивает фон. Возникла проблема с морганием и можно ли вообще не перерисовывать линии? (Еще хотелось бы опытного взгляда на другие проблемы для этого и выкладываю код, что всвязи с этими проблемами стоит почитать?)
Код: java
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.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
import java.awt.Color;

import java.awt.Graphics;
import java.awt.Image;



import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

import java.util.TimerTask;
import java.util.Vector;
import javax.swing.JFrame;

/**
 *
 * @author Николай
 */
public class rcan extends JFrame{
 Graphics gr;
public static int times=0;
 public static Vector <tele> teles=new Vector<>();

 public static ball bal=new ball(450, 300);
public static Image offImg;

 public static rcan f ;
 
 
    public static void main(String[] args) {
    f=   new rcan("аркан");
 
     f.setDefaultCloseOperation(EXIT_ON_CLOSE); 
f.addKeyListener(new KeyEventDemo());
bal.ux=-12;

    }
      
    
    rcan(String s){
    super(s);
     setBounds(0, 0, 900, 600);
     setVisible(true); 
     gr=getGraphics();
       offImg = createImage(900, 600);        // Получаем его графический контекст.
     tele lt=new tele(100,100);
     teles.add(lt);
      tele rt=new tele(700,100);
     teles.add(rt);
   
     
          java.util.Timer timer2 = new java.util.Timer();
  TimerTask task;
     task = new TimerTask() {
         public void run()
         {
             ris(gr);
             for(int i=teles.get(0).x;i<=teles.get(0).x+39;i++){
             for(int ii=teles.get(0).y;ii<=teles.get(0).y+69;ii++){
             if((i-(bal.x+20))*(i-(bal.x+20))+(ii-(bal.y+20))*(ii-(bal.y+20))<=20*20){
                 if(times>=10){
             bal.ux*=-1;
             bal.ux+=1;
             int rand;
             rand=(int)(Math.round(Math.random()));
             if (rand==1) rand=-1;
             else rand=1;
             bal.uy=bal.uy*-1 +rand;
             times=0;
             System.out.println(rand);
             }
             }}
             }
             
             
             for(int i=teles.get(1).x;i<=teles.get(1).x+39;i++){
             for(int ii=teles.get(1).y;ii<=teles.get(1).y+69;ii++){
             if((i-(bal.x+20))*(i-(bal.x+20))+(ii-(bal.y+20))*(ii-(bal.y+20))<=20*20){
                 if(times>=10){
             bal.ux*=-1;
             bal.ux+=1;
             int rand;
             rand=(int)(Math.round(Math.random()));
             if (rand==1) rand=-1;
             else rand=1;
             bal.uy=bal.uy*-1 +rand;
             times=0;
             System.out.println(rand);
             }
             }}
             }
             
             
             times++;
            
         }
         void ris(Graphics g){
           
             g.clearRect(0, 0, 900, 600);
            g.drawImage(offImg,0,0,f);
             Graphics offGr = offImg.getGraphics();

         
             offGr.setColor(new Color((int)(Math.round(Math.random()*255)),(int)(Math.round(Math.random()*255)),(int)(Math.round(Math.random()*255))));
             offGr.drawLine((int)(Math.round(Math.random()*900)), (int)(Math.round(Math.random()*600)), (int)(Math.round(Math.random()*900)), (int)(Math.round(Math.random()*900)));
             
             
             for(int i=0;i<teles.size();i++){
             g.fillRect(teles.get(i).x, teles.get(i).y, 40, 70);   
         } g.fillOval(bal.x+=bal.ux, bal.y+=bal.uy, 40, 40);
         }
     };
  timer2.schedule( task, 0, 200 );
    }
   
}

class tele{
int x, y;
tele(int xx,int yy){
x=xx;
y=yy;

}
}

class line{
int x, y, x2, y2;
Color col;
line(int xx,int yy, int xx2, int yy2, Color ss){
x=xx;
y=yy;
x2=xx2;
y2=yy2;
col=ss;

}
}

class ball{
int x, y, ux, uy;
ball(int xx,int yy){
    ux=0;
    uy=0;
x=xx;
y=yy;

}
}

 class KeyEventDemo   implements KeyListener  {

    /** Handle the key-pressed event*/
    @Override
    public void keyPressed(KeyEvent e) {
        if (e.getKeyCode() == KeyEvent.VK_W ) {
            rcan.teles.get(0).y-=12;
            
        } else if (e.getKeyCode() == KeyEvent.VK_S) {
            rcan.teles.get(0).y+=12;
        } 
           if (e.getKeyCode() == KeyEvent.VK_E ) {
            rcan.teles.get(1).y-=12;
            
        } else if (e.getKeyCode() == KeyEvent.VK_D) {
            rcan.teles.get(1).y+=12;
        } 
    }

    @Override
    public void keyTyped(KeyEvent e) {
        //throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
    }

    @Override
    public void keyReleased(KeyEvent e) {
      //  throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
    }

}
...
Рейтинг: 0 / 0
06.08.2014, 17:37
    #38714447
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с графикой
Стоит почитать:
Java Coding Convention
http://www.oracle.com/technetwork/java/codeconvtoc-136057.html
и отформатировать код в соответсвии с ним.

Затем стоит посмотреть готовый код в
JDK\demo на пример демок с анимацией

Затем почитать теорию про Game Loop, чтобы не возникало вопросов про "моргания"
http://gameprogrammingpatterns.com/game-loop.html
http://www.gameprogblog.com/generic-game-loop/
Вот это, ИМХО, лучшее:
http://www.koonsolo.com/news/dewitters-gameloop/

Затем, более продвинутые API для работы с графикой в Java
Processing
https://www.processing.org/
JavaFX
http://docs.oracle.com/javafx/2/canvas/jfxpub-canvas.htm

Ну, и на последок может быть выкинуть Java и взять Unity?
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Работа с графикой / 2 сообщений из 2, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]