当前位置: 代码迷 >> Java相关 >> 画布背景背景透明化
  详细解决方案

画布背景背景透明化

热度:211   发布时间:2010-06-27 18:21:00.0
画布背景背景透明化
做俄罗方块玩,一个画布当墙,一个画布当砖头,
setBackground(new Color(0x88ffffff,true))不管用,不知道咋整
搜索更多相关的解决方案: 画布  透明化  

----------------解决方案--------------------------------------------------------
重绘组件,使用g.draw方法可以设置背景
----------------解决方案--------------------------------------------------------
是嘛,我记得好像试过。失败了

还有,在Applet上加入键盘事件没搞出来,加到Botton上了.

用别人的电脑才发现要点过【开始】才能移动,自己的一开始就有焦点。

半成品,就差历遍墙的数组(length-2)和BOTTON按键事件也没做  ;没发现array,昨天电脑也坏了,写不下去了。
import java.applet.*;
import java.awt.*;
import java.awt.event.*;
class add方块 extends Canvas{
    aa a;
    add方块(aa o){
        a=o;
        setSize(301,451);

    }
    public void paint(Graphics g){
        for(int i=0;i<a.a.length;i++){
            for(int i1=0;i1<a.a[i].length;i1++){
                if(a.a[i][i1]){
                    g.setColor(new Color(0xaaaaaa));
                    g.fillRect((i1+a.n[0])*10,(i+a.n[1])*10,10,10);
                    g.setColor(new Color(0x333333));
                    g.drawRect((i1+a.n[0])*10,(i+a.n[1])*10,10,10);
                }
            }
        }
        for(int i=0;i<46;i++){
            for(int i1=0;i1<30;i1++){
                if(a.墙的数据[i][i1]){
                    g.setColor(new Color(0xcccccc));
                    g.fillRect(i1*10,i*10,10,10);
                    g.setColor(new Color(0x666666));
                    g.drawRect(i1*10,i*10,10,10);
                }
            }
        }
    }
}


public class aa extends Applet implements KeyListener,Runnable{
    private Panel p1;
    private add方块 f;
    Thread settime;
    private int 速度=300;
    public int n[]={13,0};
    public boolean 墙的数据[][]=new boolean[46][30];
    private boolean a1[][]={{false,true,true,false},{false,true,false,false},{false,true,false,false},{false,false,false,false}};
    private boolean a2[][]={{false,true,false,false},{false,true,false,false},{false,true,false,false},{false,true,false,false}};
    private boolean a3[][]={{false,false,false,false},{false,true,true,false},{false,true,true,false},{false,false,false,false}};
    private boolean a4[][]={{false,true,false,false},{false,true,true,false},{false,true,false,false},{false,false,false,false}};

    public boolean a[][]=a4;

    public void run(){
        while(true){
            try{
                settime.sleep(速度);
            }catch(InterruptedException e){}
            if(测试碰撞()){
                for(int i=0;i<4;i++){
                    for(int p=0;p<4;p++){
                        if(a[i][p]){墙的数据[i+n[1]][p+n[0]]=true;}        
                    }
                }
                n[0]=13;
                n[1]=-1;
                int x=(int) (Math.random()*4);
                if(x==0){a=a1;}else if(x==1){a=a2;}else if(x==2){a=a3;}else{a=a4;}
            }
            n[1]++;
            f.repaint();   
        }
    }

    private boolean 测试碰撞(){
        for(int i=0;i<4;i++){
            for(int p=0;p<4;p++){
                if(a[i][p]==true && 墙的数据[i+n[1]+1][p+n[0]]==true){return true;}        
            }
        }
        return false;

    }
    public void init(){

        for(int i=0;i<46;i++){
            for(int o=0;o<30;o++){
                墙的数据[i][o]=false;
            }
        }
        for(int o=0;o<30;o++){
            墙的数据[44][o]=true;
        }
        setBackground(new Color(0x88000000,true));
        setLayout(null);        

        p1=new Panel(null);
        
        p1.setBackground(new Color(0xffffff));
        p1.setBounds(20,20,301,451);
        add(p1);
        f=new add方块(this);
        p1.add(f);
        f.setLocation(0,0);
        Button b=new Button("开始");
        add(b);
        b.setBounds(350,20,100,25);
        b.addKeyListener(this);
        settime=new Thread(this);
        settime.start();
    }


    private  boolean[][] 转动(){
        boolean ar[][]=new boolean[4][4];
        for(int o=0;o<4;o++){
            for(int i=3;i>=0;i--){
                ar[o][3-i]=a[i][o];        
            }
        }
        return ar;

    }


    private void 左边界(){
        if(n[0]<0){
            int i=-n[0]-1;
            for(int p=0;p<4;p++){
                if(a[p][i]){
                    n[0]++;
                    return;
                }
            }
            
        }
    }

    private void 右边界(){
        if(n[0]>26){
            int i=4-(n[0]-26);
            for(int p=0;p<4;p++){
                if(a[p][i]){
                    n[0]--;
                    return;
                }
            }
        
        }        
    }


    private boolean 左碰撞(){
        for(int i=0;i<4;i++){
            for(int p=0;p<4;p++){
                if(p+n[0]-1>=0){
                    if(a[i][p]==true && 墙的数据[i+n[1]][p+n[0]-1]==true){return false;}
                }        
            }
        }
        return true;
    }


    private boolean 右碰撞(){
        for(int i=0;i<4;i++){
            for(int p=0;p<4;p++){
                if(p+n[0]-1<=30){
                    if(a[i][p]==true && 墙的数据[i+n[1]][p+n[0]+1]==true){return false;}
                }        
            }
        }
        return true;
    }


    public void keyPressed(KeyEvent e){
        if(e.getKeyCode()==KeyEvent.VK_UP){
            for(int i=0;i<3;i++){a=转动();}
            for(int i=0;i<2;i++){
                左边界();
                右边界();
            }
        }else if(e.getKeyCode()==KeyEvent.VK_LEFT){
            if(左碰撞()){n[0]--;}
            左边界();
        }else if(e.getKeyCode()==KeyEvent.VK_RIGHT){
            n[0]++;   
            右边界();
        }else if(e.getKeyCode()==KeyEvent.VK_DOWN){
            速度=30;
        }   
            f.repaint();   

    }


    public void keyReleased(KeyEvent e){
        if(e.getKeyCode()==KeyEvent.VK_DOWN){
            速度=300;
        }
    }
    public void keyTyped(KeyEvent e){}

}



[ 本帖最后由 虾B写 于 2010-6-30 17:33 编辑 ]
----------------解决方案--------------------------------------------------------
以下是引用linjx0123在2010-6-28 10:21:16的发言:

重绘组件,使用g.draw方法可以设置背景
我记得好想是用g.draw画了个透明矩形,但还是白色
----------------解决方案--------------------------------------------------------
用别人的电脑还发现闪的厉害,这些自己电脑上没出现过。
----------------解决方案--------------------------------------------------------
  相关解决方案