powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Работа с графикой
2 сообщений из 2, страница 1 из 1
Работа с графикой
    #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
Работа с графикой
    #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
2 сообщений из 2, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Работа с графикой
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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