标题:画布背景背景透明化
只看楼主
虾B写
Rank: 8Rank: 8
来 自:湖北
等 级:蝙蝠侠
威 望:3
帖 子:395
专家分:922
注 册:2009-10-1
结帖率:100%
已结贴  问题点数:1 回复次数:4 
画布背景背景透明化
做俄罗方块玩,一个画布当墙,一个画布当砖头,
setBackground(new Color(0x88ffffff,true))不管用,不知道咋整
搜索更多相关主题的帖子: 画布 透明化 
2010-06-27 18:21
linjx0123
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:14
帖 子:279
专家分:1362
注 册:2006-4-7
得分:1 
重绘组件,使用g.draw方法可以设置背景
2010-06-28 10:21
虾B写
Rank: 8Rank: 8
来 自:湖北
等 级:蝙蝠侠
威 望:3
帖 子:395
专家分:922
注 册:2009-10-1
得分:0 
是嘛,我记得好像试过。失败了

还有,在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 编辑 ]

白娘故意下雨骗许仙的伞。祝英台十八里相送时装疯卖傻调戏梁山伯。七仙女挡住了董永的去路。牛郎趁织女洗澡时拿走了她的衣服。。。这些故事告诉我们;伟大爱情的开始,总归的有一个要先耍流氓!
2010-06-30 17:28
虾B写
Rank: 8Rank: 8
来 自:湖北
等 级:蝙蝠侠
威 望:3
帖 子:395
专家分:922
注 册:2009-10-1
得分:0 
以下是引用linjx0123在2010-6-28 10:21:16的发言:

重绘组件,使用g.draw方法可以设置背景
我记得好想是用g.draw画了个透明矩形,但还是白色

白娘故意下雨骗许仙的伞。祝英台十八里相送时装疯卖傻调戏梁山伯。七仙女挡住了董永的去路。牛郎趁织女洗澡时拿走了她的衣服。。。这些故事告诉我们;伟大爱情的开始,总归的有一个要先耍流氓!
2010-06-30 17:41
虾B写
Rank: 8Rank: 8
来 自:湖北
等 级:蝙蝠侠
威 望:3
帖 子:395
专家分:922
注 册:2009-10-1
得分:0 
用别人的电脑还发现闪的厉害,这些自己电脑上没出现过。

白娘故意下雨骗许仙的伞。祝英台十八里相送时装疯卖傻调戏梁山伯。七仙女挡住了董永的去路。牛郎趁织女洗澡时拿走了她的衣服。。。这些故事告诉我们;伟大爱情的开始,总归的有一个要先耍流氓!
2010-06-30 17:45



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-311405-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.147068 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved