Bài 3 - Sử dụng scene2d

Thảo luận trong 'Lập trình LibGDX' bắt đầu bởi Nem, 12/3/13.

  1. Nem

    Nem Moderator

    Lượt xem: 12,493
    Bài 3: Sử dụng scene2d

    Đề bài có 2 phần chính...
    1. Một tấm hình lớn di chuyển ngẫu nhiên trên màn hình điện thoại
    2. các tấm hình nhỏ nằm trong tấm hình lớn phóng to, thu nhỏ, xoay tròn và di chuyển trong phạm vi tấm hình lớn.
    ---------
    Ngay lập tức mình sẽ xây dựng
    1. một custom group, trong đó sẽ có nạp hình nền và di chuyển ngẫu nhiên bằng action

    2. một custom image, trong đó có nạp hình nền, phóng to, thu nhỏ , xoay tròn, di chuyển ngẫu nhiên bằng action

    MyGroup.java
    PHP:
    public class MyGroup extends Group {
     
        final static 
    int WIDTH 300;
        final static 
    int HEIGHT 300;
     
        private 
    Image frame//hình nền của group
     
        
    public MyGroup(AtlasRegion aregion)
        {
            
    super();
            
    this.setX(0);
            
    this.setY(0);
            
    this.setWidth(WIDTH);
            
    this.setHeight(HEIGHT);
       
       
            
    //Nạp hình nền cho Group
            
    frame = new Image(aregion);
            
    frame.setWidth(WIDTH);
            
    frame.setHeight(HEIGHT);
            
    this.addActor(frame);
       
            
    //di chuyển ngẫu nhiên group.
            
    Moving();
       
        }
     
        private 
    void Moving()
        {
            
    int x MathUtils.random(0BaseScreen.VIEWPORT_WIDTH WIDTH);
            
    int y MathUtils.random(0BaseScreen.VIEWPORT_HEIGHT HEIGHT);
       
            
    this.addAction(sequence(moveTo(xy0.5f),
                    
    run(new Runnable() {
                        public 
    void run () {
                            
    Moving();
                        }
                    })));   
       
        }
    MyImage.java
    PHP:
    public class MyImage extends Image
    {
        final static 
    int DIAMETER 40;
        private 
    int GroupW;
        private 
    int GroupH;
     
        public 
    MyImage(AtlasRegion aregionint GroupWidthint GroupHeight)
        {
            
    super(aregion);
       
            
    this.setWidth(DIAMETER);
            
    this.setHeight(DIAMETER);;
            
    this.setX(0);
            
    this.setY(0);
     
            
    this.GroupW GroupWidth;
            
    this.GroupH GroupHeight;
       
            
    this.setOrigin(DIAMETER 2DIAMETER 2); //Lấy tâm tọa độ là điểm giữa hình... để xoay, zoom theo tâm này.
     
            //Di chuyển ngẫu nhiên hình
            
    Moving();
     
        }
     
        private 
    void Moving()
        {
            
    int s MathUtils.random(12);
            
    int r MathUtils.random(0360);
       
            
    int x MathUtils.random((DIAMETER s)/2GroupW - (DIAMETER s));
            
    int y MathUtils.random((DIAMETER s)/2GroupH - (DIAMETER s));
       
            
    //Thực hiện tuần tự 2 thao tác:
            //1. Thao tác 1: Thực hiện đồng thời 3 thao tác: xoay, zoom và tịnh tiến
            //2. run Moving()
            
    this.addAction(sequence(parallel(rotateTo(r0.5f), scaleTo(ss0.5f), moveTo(xy0.5f)),
                    
    run(new Runnable() {
                        public 
    void run () {
                            
    Moving();
                        }
                    })));   
       
       
        }
    Theo đề bài tạo 2 group mỗi group có 3 hình
    PHP:
    MyGroup group1 = new MyGroup(getAtlas().findRegionstrFrame1[0] ));
     
            
    MyImage ball1 = new MyImage(getAtlas().findRegionstrFrame1[1] ), (int)group1.getWidth(), (int)group1.getHeight());
            
    MyImage ball2 = new MyImage(getAtlas().findRegionstrFrame1[2] ), (int)group1.getWidth(), (int)group1.getHeight());
            
    MyImage ball3 = new MyImage(getAtlas().findRegionstrFrame1[3] ), (int)group1.getWidth(), (int)group1.getHeight());
       
            
    group1.addActor(ball1);
            
    group1.addActor(ball2);
            
    group1.addActor(ball3);
       
            
    stage.addActorgroup1 );
    Tương tự cho group2
    PHP:
    MyGroup group2 = new MyGroup(getAtlas().findRegionstrFrame2[0] ));
     
            
    MyImage card1 = new MyImage(getAtlas().findRegionstrFrame2[1] ), (int)group2.getWidth(), (int)group2.getHeight());
            
    MyImage card2 = new MyImage(getAtlas().findRegionstrFrame2[2] ), (int)group2.getWidth(), (int)group2.getHeight());
            
    MyImage card3 = new MyImage(getAtlas().findRegionstrFrame2[3] ), (int)group2.getWidth(), (int)group2.getHeight());
       
            
    group2.addActor(card1);
            
    group2.addActor(card2);
            
    group2.addActor(card3);
       
            
    stage.addActorgroup2 );
    Thế là trên màn hình có 2 hình lớn chạy loạn xạ trên màn hình và trong mỗi hình lớn có 3 hình nhỏ chạy, zoom, xoay loạn xạ trong hình lớn.

    Kết thúc bài 3.
    Đây là source code mình đã làm các bạn có thể tham khảo:
    http://share.vnn.vn/tai-file-20026315
    vangioicnt thích bài này.

Chia sẻ trang này