Chào mừng đến với Diễn đàn lập trình - Cộng đồng lập trình.
Kết quả 1 đến 5 của 5
  1. #1
    Ngày tham gia
    Sep 2015
    Bài viết
    0

  2. #2
    Ngày tham gia
    Sep 2015
    Bài viết
    0

    lỗi chương trình bị giật khi gọi list.add()

    Mình có 1 project sư dụng sủrfaceview. . trong class mysurface extends Sủrfaceview implement Runnable, ơ phuong thuc run() mình có gọi list.add( new ( object)) ; không hiêu sao mỗi lân gọi phương thức líst.add() đó thì chương trình lại bị giât, delay môt. Tẹo. Hỏi các bạn nguyên nhân và khác phục nó ntn?

  3. #3
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Trong 1 thread mà tạo 1 thread nữa thì ntn?
    đây là tóm tắt project của mình, kết quả của ứng dụng là cứ khi chạm tay vào màn hình thì tạo ra 1 quả bóng ở vị trí chạm đó, và quả bóng rơi xuống, để quản lý, tạo, và vẽ các quả bóng sử dụng "public List<Ball> mangball=new ArrayList<Ball>();"
    mỗi lần add một quả bóng là chương trình bị delay, khiến các quả bóng dang rơi bị giật.

    Mã:
    public class Bsurface extends SurfaceView implements Runnable{
           Bgame context;
           Thread thread; 
          Manage_ball1  manage1;
           Manage_ball2  manage2;
           ........cac khai bao khác        
    
           public Bsurface(Bgame context) {
                   this.context=context;
                   
                   thread=new Thread(this);
                   thread.start();
    
           }
       @Override
    	public void run() {
    		// TODO Auto-generated method stub
    		while(true){
    			if(!bholder.getSurface().isValid())
    				continue;
    
                               //ve cac doi tuong chuyen dong
                                 manage1.ve(canvas);
                                 manage2.ve(canvas);
    
    
                             Canvas canvas=bholder.lockCanvas();
                         bholder.unlockCanvasAndPost(canvas);
    				
    			try {
    				Thread.sleep(50);
    			} catch (InterruptedException e) {
    				// TODO Auto-generated catch block
    				e.printStackTrace();
    			}
    			
    		}
    
    
    }
    public class Manage_ball1{
             public List<Ball> mangball=new ArrayList<Ball>();
         //cac thuoc tinh
           public Manage_ball1(Bsurface bsurface){
            this.bsurface=bsurface;
           }
          
          public void ve(Canvas canvas){
    
    //creat mang ball
          if( ...."chạm tay vao man hinh==true"...){
             mangball.add(new Ball(bsurface,toado_x,toado_y);
          }
        //ve cac qua bong trong list
           for(int i=0;i<mangball.size();i++){
             mangball.get(i).ve(canvas);
            }
         }
    
    
    }
     ///tomtat class ball
     public class Ball{
     Bsurface b;
    float x,y;
     public Ball(Bsurface b,float x,float y){
    this.b=b;
    this.x=x;
    this.y=y;
    }
    public void ve(Canvas canvas){
    //di chuyen ball
    y=y+2;
    
    thay doi toa do ball
    
    //ve ball
    canvas.drawBitmap(ball,x,y,null);
    
    }

  4. #4
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Mã:
    try {
    				Thread.sleep(50);
    			} catch (InterruptedException e) {
    				// TODO Auto-generated catch block
    				e.printStackTrace();
    			}
    Cái này để làm gì vậy?

  5. #5
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Trích dẫn Gửi bởi snake_programmer
    Mã:
    try {
    				Thread.sleep(50);
    			} catch (InterruptedException e) {
    				// TODO Auto-generated catch block
    				e.printStackTrace();
    			}
    Cái này để làm gì vậy?
    cái này nằm trong vòng lặp while- vòng lặp vẽ đi vẽ lại lên bề mặt bằng canvas mà,sau mỗi lần vẽ ta lại gọi Thread.sleep(50) để tạo chu kỳ (khoảng thời gian giữa các hình, từ đó tính đc số hình động trên 1s, ở đây là 20 hình/s mắt vẫn ko có cảm giác là giật) trong ví dụ trên hình chỉ giật khi có 1 quả bóng được tạo ra,. Mà các quả bóng được tạo ra bằng list, mõi lần list thêm 1 phần tử là lại bị dừng hình khá lâu so với lúc các quả bóng đang được vẽ chuyển động bình thường.

 

 

Quyền viết bài

  • Bạn Không thể gửi Chủ đề mới
  • Bạn Không thể Gửi trả lời
  • Bạn Không thể Gửi file đính kèm
  • Bạn Không thể Sửa bài viết của mình
  •