正文

J2ME 移动窗口TiledLayr类例子2006-11-06 21:12:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/sword2008/20051.html

分享到:

/*

//background.png
//01.png

*/

/*

*http://blog.programfan.com/blog.asp?author=qq14923349

*程序之巢制作,移动窗口TiledLayr类例子

*图片存在rec目录下,记得在存之前把格式转换成png,具体方法是:

1,点击开始

2,附件

3,图画板

4,打开图片

5,另存为(可以存作PNG了,不要改后续名,否则运行不了)

6,其他工具,可以选用PS,或者ACDSEE等等改

*/
import javax.microedition.midlet.MIDlet;
import javax.microedition.lcdui.*;
import javax.microedition.lcdui.game.*;

public class Wcanvas extends MIDlet{
 private Display display;

 public void startApp(){

 display=Display.getDisplay(this);

 new wCanvas(display).start();
         }

 public void pauseApp(){}

 public void destroyApp(boolean unkown){}

 


//System.out.println("试验");

class wCanvas extends GameCanvas implements Runnable

 private Display display;
 private boolean suspend=false; //暂停 
 private int frameDelay=100;
 private Sprite role;
 private TiledLayer background_1,background_2,background_3;
 private int []laymap=new int[4];//地图数组
 private int roleXspeed,roleYspeed,backgroundXspeed,backgroundYspeend;
 private int halfwidth=getWidth();

 public wCanvas(Display d){                                       //contractor构造涵数
 super(true);
 display=d;
 display.setCurrent(this);
     }

 private void start(){

 init();//初始化
 
 toStartThread();//启动线程
  
      }
 
 private void init(){
 try{
 role=new Sprite(Image.createImage("/01.png"),22,22);
 
 background_1=new TiledLayer(1,4,Image.createImage("/background.png"),88,40);
 
 background_2=new TiledLayer(1,4,Image.createImage("/background.png"),88,40);
 
 background_3=new TiledLayer(1,4,Image.createImage("/background.png"),88,40);
 
    }
 catch(Exception e){
 System.out.println(e.toString());
     }

 int []laymap={1,2,1,2};

 for(int i=0;i<laymap.length;i++){
 
 int column=i%1;
 
 int row=(i-column)/16;

 background_1.setCell(column,row,laymap[i]); 

 background_1.setPosition(0,0);

 role.setPosition(0,0);

     }
 
      }

 private void toStartThread(){
 Thread t=new Thread(this);
 t.start();
 
 
        }
 
 public void run(){

 while(!suspend){

 Graphics g=getGraphics();
 
 update();//更新和响应按键

 judgement();//对ROLE作出判断,同时移动窗口
 
 draw(g);//画图
 
 try{     //频率
 Thread.sleep(frameDelay);
    }
 catch(Exception e){System.out.println(e.toString());} 
         } 
    }
 
 private void update(){
 
 role.nextFrame();    //蜜蜂不停地动
 
 int keyState=getKeyStates();

 if((keyState & LEFT_PRESSED)!=0 ){
 
 roleXspeed=-2;
 role.move(roleXspeed,0); 
 
      }
 else if((keyState & RIGHT_PRESSED)!=0 ){
 
 roleXspeed=2;
 role.move(roleXspeed,0); 
       }
 if((keyState & UP_PRESSED)!=0 ){
 
 roleYspeed=-2; 
 role.move(0,roleYspeed); 
      }
 else if((keyState & DOWN_PRESSED)!=0 ){
 
 roleYspeed=2;
 role.move(0,roleYspeed); 
       }
 
 
        }


 private void judgement(){

 if(role.getX()<0){
 
 role.setPosition(0,role.getY());
    }
 
 if(role.getX()>15){
 
 role.setPosition(15,role.getY());
 
 if(background_1!=null)
 {
 background_1.move(-1,0);
 }
     }
 
 if(background_1!=null)
 if(background_1.getX()==-background_1.getWidth()){

 background_1=null;
         }

    }
 
       
 
 


 private void draw(Graphics g){
 
 g.setColor(0xffffff);

 g.fillRect(0,0,getWidth(),getHeight());

 threebackgroundjudgement();
 
 role.paint(g);
  
 g.setColor(0x000000);
 
 g.drawString("宽为"+getWidth()+"   高为  "+getHeight(),15,70,Graphics.TOP|Graphics.LEFT);
  
 flushGraphics();
 
             }

  
 private void threebackgroundjudgement(){
  
 Graphics g=getGraphics();
 
 if(background_1!=null)
 {
 background_1.paint(g);
 }
 if(background_2!=null)
 {
 background_2.paint(g);
 }
 if(background_3!=null)
 {
 background_3.paint(g);
 }
 
            }
 
}

 

 
       }

阅读(3768) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册