Kenny_Liu's profile入乡随俗PhotosBlogListsMore Tools Help

Blog


    9/21/2006

    双点线斜45度视角坐标转换正视角坐标公式

      public int get45X(int x,int y){
        return (x + 2 * y) / 4;
      }
      public int get45Y(int x,int y){
        return (x - 2 * y) / 4;
      }
     
    不小心把qiqi公式扔掉了。。。qiqi看见在给我写一份......
    7/11/2006

    孔挖法-随机迷宫算法

        迷宫必须是奇数*奇数,出口在右下角(也可以随即选择一个终结点作为出口)

    1. 确定起始位置
    2. 随即一个方向,延伸两格,检查是否出边界或者是否碰到道路,否:继续2 是:3
    3. 返回上一个点,继续2,如果上一个点是起点,结束

    2.0半透明矩形,傻归傻,总比没有好

      public void fillRect(Graphics g, int x, int y,int w, int h,int ARGBColor) {
        if (w <= 0 || h <= 0)
          return;
        if ( (ARGBColor & 0xff000000) == 0xff000000) {
          g.setColor(ARGBColor);
          g.fillRect(x, y, w, h);
        }
        else if ( (ARGBColor & 0xff000000) != 0x00000000) {
          int[] ARGB = new int[w * h];
          ARGB[0] = ARGBColor;
          int TempPos = 1;
          while (TempPos < ARGB.length) {
            int TempLen = TempPos;
            if (TempPos + TempLen > ARGB.length) {
              TempLen = ARGB.length - TempPos;
            }
            System.arraycopy(ARGB, 0, ARGB, TempPos, TempLen);
            TempPos += TempLen;
          }
          g.drawRGB(ARGB, 0, w, x, y,w, h, true);
        }
      }
    3/9/2006

    Sycn Edit Mode

    同步选择区域变量,改掉一个其他都一起跟着改
    ctrl+shift+J
    2/23/2006

    alpha混合Nokia版

    一年前的东西,忘记贴上来,有bug,不能透明
     
      void drawGame(Graphics g)
      {
        DirectGraphics dg;
        if (bkSrc==null){
          test = Image.createImage(bkWidth,bkHeight);     //为虾米要新创建一个涅,因为原来的image是不可变的,不能getPixels
          test.getGraphics().drawImage(bk,0,0,g.LEFT|g.TOP);
          bkSrc = new short[bk.getWidth()*bk.getHeight()];
          dg = DirectUtils.getDirectGraphics(test.getGraphics());
          dg.getPixels(bkSrc, 0, bkWidth, 0, 0, bkWidth, bkHeight, 444);
        }
       
        if (objSrc==null){
          test = Image.createImage(objWidth,objHeight);
          test.getGraphics().drawImage(obj,0,0,g.LEFT|g.TOP);
          objSrc = new short[obj.getWidth()*obj.getHeight()];
          dg = DirectUtils.getDirectGraphics(test.getGraphics());
          dg.getPixels(objSrc, 0, objWidth, 0, 0, objWidth, objHeight,444);
        }
        dg = DirectUtils.getDirectGraphics(g);
        g.drawImage(bk,0,0,g.LEFT|g.TOP);
        long a = System.currentTimeMillis();
        short drawSrc[] = new short[obj.getWidth()*obj.getHeight()];   
        for (int i = 0;i<objSrc.length;i++){
          short obj = objSrc[i];
          int line = i/objWidth;
          int row = i%objWidth;
          short bk = bkSrc[line*bkWidth+row];
          int objR = obj>>8&0xf;
          int objG = obj>>4&0xf;
          int objB = obj&0xf;
          int bkR = bk>>8&0xf;
          int bkG = bk>>4&0xf;
          int bkB = bk&0xf;
          objR = objR*per/100+bkR*(100-per)/100;
          objG = objG*per/100+bkG*(100-per)/100;
          objB = objB*per/100+bkB*(100-per)/100;
          System.out.println(objSrc[i]&0xf000);
          drawSrc[i] = (short)(objSrc[i]&0xf000|((objR<<8)|(objG<<4)|objB));
        }
        dg.drawPixels(drawSrc,false,0,objWidth,0,0,objWidth,objHeight,0,444);
        g.drawString((System.currentTimeMillis()-a)+"",0,0,g.LEFT|g.TOP);
      }
    7/12/2005

    单独存bSound

    第一步:添加以下两个函数:
    void loadSetting()
      {
        RecordStore rs=null;
        try
        {
          //打开纪录
          bHide=true;
          rs=RecordStore.openRecordStore(strRec,true);
          if(rs.getNumRecords() <= 0)
          {
            this.saveSetting();
          }
          else
          {
     
              byte data[] = rs.getRecord(1);
              if (data == null)return;
              ByteArrayInputStream baos = new
                  ByteArrayInputStream(data, 0, data.length);
              DataInputStream dos = new DataInputStream(baos);
              try {
                bSound = dos.readBoolean();
                nSetID = dos.readByte();
                nContextID = dos.readByte();
     
              }
              catch (Exception e) {}
     
            }
     
          }catch(Exception e)
          {
            e.printStackTrace();
          }
          return ;
     
      }
     
      int nSetID = 1;//记录设置用的序号
      int nContextID = -1;//记录内容用的序号
      boolean saveSetting()
    {
        boolean bOK=false;
        RecordStore rs=null;
        //打开纪录
        ByteArrayOutputStream baos=new ByteArrayOutputStream();
        DataOutputStream dos=new DataOutputStream(baos);
        try
            {
              //写入数据信息
              try{
                  dos.writeBoolean(bSound);
                  dos.write(nSetID);
                  dos.write(nContextID);
                  }catch(Exception e){
                  dos.close();
                  }
                dos.close();
                //写入到纪录
                byte[] data=baos.toByteArray();
                rs=RecordStore.openRecordStore(strRec,true);
                int a= rs.getNumRecords();
              //  int b = rs.getSizeAvailable();
             //   rs.getSizeAvailable();
     
                if(a <= 0)
                {
                  nSetID = rs.addRecord(data, 0, data.length);
     
                }
                else
                {
                  rs.setRecord(nSetID, data, 0, data.length);
                }
                rs.closeRecordStore();
     
                bOK=true;
                }catch(Exception e)
                {
                }
     
           return bOK;
     
    }
     
    第二步:在Games的构造函数中调用loadSetting,在quitGame()中调用saveSetting();
    第三步:把saveGame()
    {
     try
     {
     ...
     }catch()
     {}
     ...
             dos.close();
             //写入到纪录
             byte[] data=baos.toByteArray();
             rs=RecordStore.openRecordStore(strRec,true);
             rs.addRecord(data,0,data.length);
             rs.closeRecordStore();
    }修改为
    {
     try
     {
     ...
     }catch()
     {}
     ...
             dos.close();
             //写入到纪录
             byte[] data=baos.toByteArray();
             rs=RecordStore.openRecordStore(strRec,true);
             if(nContextID < 0)
               nContextID = rs.addRecord(data,0,data.length);
             else
               rs.setRecord(nContextID, data, 0, data.length);
             rs.closeRecordStore();

    }
    第四步:把loadGame()中
    {
     ...
     for(int i=1;i<rs.getNextRecordID();i++)
           {
             //查询所有的纪录
             if(rs.getRecordSize(i)<=0) continue;
             //读取数据
             byte data[]=rs.getRecord(i);
             if(data==null) continue;
             ByteArrayInputStream baos=new
                                       ByteArrayInputStream(data,0,data.length);
             DataInputStream dos=new DataInputStream(baos);
     try
     {
     ...
     }
    }修改为
    {
     ...
     if(nContextID < 0)return false;
     byte data[]=rs.getRecord(nContextID);
             if(data==null) return false;
             ByteArrayInputStream baos=new
                                       ByteArrayInputStream(data,0,data.length);
             DataInputStream dos=new DataInputStream(baos);
     try
     {
     ...
     }
    }
    第五步:将原saveGame和loadGame中有关bSound的部分去掉。
     
     
    曹珺
     
    上海岩浆数码技术有限公司
    上海市青海路118号云海苑17层(200041)
    电话:021 52280720/1/2/3-203
    传真:021 62181045
    手机:13817066976
    邮箱:cao.jun@magma-digital.com
    7/2/2005

    看到的爆寒的招聘,佩服死这公司的hr了,有这么写招聘广告的么

    手机游戏设计师(职位编号:011)
    电子邮箱:hr@heartware.com.cn
    发布日期:2005-07-02 工作地点:上海市
    招聘人数:2 学    历:本科
    工作年限:一年以上 薪水范围:面议
    外语要求:英语 精通 接受简历语言:中文或英文

     

    岗位职责:
    1、 设计手机游戏的界面 场景 人物等 以像素图为主
    2、 负责公司重点游戏产品的设计和开发
    3、 产品的创意 根据相关部门的需求 独立构思必要的游戏元素
    岗位要求:
    1、具有良好的美术功底,有较好手绘能力,熟悉广告公司的创意和设计流程,能独立工作;
    2、计算机专业本科以上学历,熟悉J2ME或Brew平台。
    3、一年以上C++或Java游戏开发经验,有cvs/vss/linux使用经验者优先
    4、精通photoshop或fireworks freehand等设计工具;
    5、有设计手机游戏画面经验者优先考虑
    6、有游戏场景或人物造型设计经验者优先考虑;
    7、有高度的责任心和团队合作精神
    8、美术专业大专以上学历;(应聘时请携带作品)
    6/22/2005

    移植注意事项,md烦死了

    Moto play midi要先close置null

    左右反过来的要改帮助,要改drawKey的位置,

    6/13/2005

    察看剩余内存

    Runtime runtime = Runtime.getRuntime();
    runtime.gc();
    System.out.println(runtime.freeMemory());

    新框架drawKey画不出来或者画一半

    找到drawKey函数,加上红颜色或者其它颜色的一行,反正是颜色不一样的那一行,忘记设的是什么颜色了

     /**绘制一个按钮<br>
      * x,y(Int:In):左上角坐标<br>
      * ns(Int:In):按钮类型(BIT0:凸凹标志,BIT1:边标志)
      * nColor(Int:In):按钮颜色*/
     void drawKey(int x,int y,int w,int h,Graphics g,int ns,
                    int nColor)
       {
         g.setClip(0,0,CatDisp.decWidth,CatDisp.decHeight);
         if((ns&1)!=0)
         { //凸按钮
           if((ns&2)!=0)
           {//是否绘制边
             setColor(g, nColor, -120);
    。。。。
    。。。。
    。。。

    阅读全文 /

    JBuilder X支持中文的解决方法(转自Borland网站)



    一.

    Q:我的 JBX 在编程界面上不支持中文,怎么办?

    A: 建议采用以下方法:

    1.找到C:\Documents and Settings\Administrator\.primetimeX\user_zh.properties 文件。
    2.备份 user_zh.properties 文件 (如copy 改名为user_zh.properties.old)
    3.找到editor.display;fixed_fonts.2,将其改为editor.display;fixed_fonts.2=\u5b8b\u4f53 (宋体的Unicode)
    4.启动 JBX 在 Tools | Preferences | Editor | Display 中就可以选择了。

    注:
    1. 也可添加其它字体,将editor.display;fixed_fonts.3...往后加就行了,但是注意如果是中文,要选择中文的Unicode。
    2. 中文字体(如宋体)可能有些地方对不齐,在Tools | Preferences | Editor | Color 中,将所有的Bold (如Reserved word) 取消就行了。

    二.

    Q:我的 JBX 在菜单界面上不支持中文,怎么办?

    A:建议采用以下方法:

    启动 JBX 在 Tools | Preferences | Browser | Look & Feel 中点选 Use different font 并选择一种中文字体,如SimSun - 宋体即可。

    三.

    Q:我的 JBX 在设计建模界面上不支持中文,怎么办?

    A:建议采用以下方法:

    启动 JBX,在 Project | Project Properties | Modeling 中并选择一种中文字体,如SimSun - 宋体即可。

    注:

    可在 Project | Default Project Properties| Modeling 中并选择一种中文字体,如SimSun - 宋体,此后所有新建的工程会自动设置该选项。

    四.

    Q:目前JBuilderX、Enterprise Studio 7 For Java 无法在 Windows Server 2003 安装,请问有何解决方案?

    A:建议针对不同产品,采用以下方法:

    JBuilderX:
    插入JBuilderX Disc1(或展开安装zip包)。如果是CD会自动弹出安装程序。先不要安装,用文件管理器找到\Windows\ent_install.exe,鼠标右键点属性,选兼容性,勾中“用兼容模式运行这个程序”,在下拉列表中选择Windows XP (或 Windows 2000),确定。然后按照正常步骤安装即可。

    对于Studio 7:
    1. 插入Studio 7 Disc1(或展开安装zip包),如果是CD会自动弹出安装程序。先不要安装,用文件管理器找到\Windows\studio_install.exe,鼠标右键点“属性”,选“兼容性”,勾中“用兼容模式运行这个程序”,在下拉列表中选择 Windows XP (或 Windows 2000),确定。然后按照正常步骤安装即可。
    2. 提示插入第二张盘(安装TJB)后,插入第二张盘。但先不要按确认键。先打开文件管理器,找到第二张盘上的\Windows\install.exe,同上修改文件属性,再按确认键继续安装。
    3. 提示插入第三张盘(安装OptimizeIt)后,插入第三张盘。但先不要按确认键。先打开文件管理器,找到第三张盘上的\win32\setup.exe,同上修改文件属性,再按确认键继续安装。

    注:
    由于Borland的Java全系列产品都是采用Zero G的Install Anywhere制作的安装盘,因此很多产品在Windows 2003下安装都会有问题,这些产品包括:JBuilderX, TJB7, Studio 7, OptimizeIt Suite 6, ServerTrace 2, JDataStore 7, BES 5.2.1。解决方法同上修改安装文件运行兼容性属性即可。BES 6.0由于使用了新的Install Anywhere 5.5制作安装盘,所以没有问题。

    五.

    Q:我已安装了 JBuilderX,但是安装路径不是C:\JBuilderX。因此,安装不了 Together for JBuilderX 7的问题,请问有何解决方案?

    A:建议采用以下方法:

    1. 首先确定已安装的JBuilderX的路径。例如:D:\JBuilderX
    2. 插入Studio 7 Disc2(或单独的TJB7的zip包,试用版客户可能会拿到这样的包)
    3. 如果是Windows 2003操作系统,应首先按照上面的说明修改文件属性
    4. 打开一个命令行窗口(cmd),在命令行中将目录转入TJB安装盘或安装包的\Windows目录
    5. 执行命令install -DUSER_INSTALL_DIR=""。例如,JBuilderX的安装路径为D:\JBuilderX,则执行:install -DUSER_INSTALL_DIR="D:\JBuilderX"
    6. 安装程序自动安装完成

    注:
    该问题关键在于JBuilderX 安装的是单独的JBuilderX 光盘,不是 Enterprise Studio 7 For Java 中的JBuilderX - Disk1 光盘。如果是后者,则无需设置。它会自动寻找JBuilderX 已安装的目录来完成安装。

    六.

    Q: 当新建一个工程时,默认Diagram会放到统一的路径diagrams下。而新工程将会自动将所有该路径下以前的diagram全都引入进来,请问有何解决方案?

    A:建议采用以下方法:

    将Default.jpr(默认路径为C:\Documents and Settings\Administrator\.jbuilderX)中的
    path[0].DefaultDiagram=D%|/JBX/diagrams
    path[0].Diagram=D%|/JBX/diagrams
    修改为
    sys[0].DefaultDiagram=D%|/JBX/diagrams
    sys[0].Diagram=D%|/JBX/diagrams
    即可。

    七.

    Q:我在JBuilderX中有时会丢失字符的现象,怎么办?

    A:该问题是因为JDK 1.4 对于中文平台的GB18030支持的问题。建议采用以下方法:

    \bin\jdk.config下加入

    vmparam -Dfile.encoding=GBK

    在NEC机子上使用 drawRoundRect()的问题

    在用NEC上使用drawRoundRect(int x,int y, int width, int height,int arcWidth, int arcHeight)函数时要注意arcWidth和arcHeight的值不能太小,至少要大于4,否则会发生致命性错误,在模拟器发现不了问题,在真机上会重起.

    Player播放音效问题


    用Player调用mid音效完成后要记得调用Player.close()释放掉这个资源
    例如:
    Player player = null;//成员变量

    player =  Manager.createPlayer(is, "audio/midi");//创建Player
    player.start();//播放

    //如果不再使用了
    player.stop();//停止
    player.close();//必须调用,否则下次用上面的语句创建player的时候player的状态永远是stop导致无法循环播放音效;

    60手机media server错误

    60concept模拟器报com.nokia.phone.sdk.mirror.lcdui.drawImage错
    但是用7210模拟器报空指针
    png文件损坏,修改了调色板没算crc,事实证明xp不验证crc

    优化速度

    buffer整个地图,把png数据读进内存,使用时候在createImage(byte[]),局部重绘

    for循环处理vector

       for (int i = floatIce.size()-1;i>=0;i--){
         System.out.println("fcuk");
         point p = (point)(floatIce.elementAt(i));
         int k = (getLayerData(p.x,p.y,3)&0xf0)>>4;
         if (k==3){
           p.clear = true;
           setLayerData(p.x,p.y,1,0);
           floatIce.removeElement(p);
         }
       }

    nec模拟器不能运行(找不到jad文件)

    工程所在目录名字中有空格

    moto模拟器不能用

    其实都能用,用v600的按键代码就可以了,但是真机上就不能用

    60模拟器能用但是手机出问题

    1.模拟器不显中文,所有font.getCharWidth("忘")=0,font.charsWidth也是0,问题可能在中文处理过程中和和中文处理有关的地方,比如算行数,偶的alert超过行数会画图标,draw的那一句有错,但是模拟器不显,所以不换行。。。。-_-b
    2.没事儿不要catch(Exception e){},要么print,要么throw,要不然出了错都不知道是哪儿。

    drawRect fillrect

    drawRect(0,0,10,1)会画一条两个像素的横线
    fillRect(0,0,10,1)就是1个像素