| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2146 人关注过本帖
标题:xxx 人物和地图的移动
取消只看楼主 加入收藏
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
结帖率:94.72%
收藏
已结贴  问题点数:20 回复次数:8 
xxx 人物和地图的移动
人物的移动可能会导致地图的移动, 但是地图的移动不会导致人物的移动,始终都要把人物放在屏幕上。
人物可以相对于屏幕移动, 也可以相对于地图移动。常见的说法是 "人物向左移动,地图向右移动", 我通常
会抽像出一个相机,人物向左移动, 相机也向左移动, 然后将地图坐标转换为屏幕坐标,本质上还是让 地图向右移动。
相信看过我先前的帖子, 会知道是怎么干的。

这里,写一段人物相对屏幕移动的垃圾代码, 如下:
switch(player.face)
{
    case RIGHT:
       if(player.ActorX < (SCREEN_WIDTH >> 1))
       {
           player.ActorX += player.speedX;
        }
        else
        {
           if (mapX > -MAP_COL * TILE_WIDTH + SCREEN_WIDTH)
           {
               mapX -= mapSpeedX;
           }
           else if (player.ActorX < (SCREEN_WIDTH - player.width)
           {
               player.ActorX += player.speedX;
           }
        }
}  

当然,还可以加上 加速度什么的, 都比较简单的 。/


[ 本帖最后由 BlueGuy 于 2010-11-14 21:50 编辑 ]
搜索更多相关主题的帖子: 地图 人物 
2010-11-13 13:59
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
收藏
得分:0 
回复 2楼 wujieru
我都怀疑你能不能写好一个 "hello world",  把你的水平*10, 二年以后,你都写不出来这段代码,。/

我就是真命天子,顺我者生,逆我者死!
2010-11-13 14:09
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
收藏
得分:0 
以下是引用wujieru在2010-11-13 14:30:39的发言:

我水平是无法估计的 很难得  哈哈
本想用言语试试你的水平,没想你还这么淡定。 这下真的遇到高手了。/

我就是真命天子,顺我者生,逆我者死!
2010-11-13 14:39
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
收藏
得分:0 
以下是引用虾B写在2010-11-13 18:46:44的发言:

本来走了的,但还是忍不住回来说你一句
 
请不要什么东东都往这里扔
你这话我就看不懂了? 这帖怎么了?
你是不是觉得这几行代码很简单?我的智商就这么高,
只能写出这样水平的代码, 要不你用c语言写一段,让我学习一下。
随便你用什么图形库,只要能够实现人物的上、下、左、右移动,
我以后不会再发这种垃圾帖。/

我不想听什么人品啊、素质啊之类的废话,写不出来就一边凉块去, 没空搭理你们。/


[ 本帖最后由 BlueGuy 于 2010-11-13 19:27 编辑 ]

我就是真命天子,顺我者生,逆我者死!
2010-11-13 18:55
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
收藏
得分:0 
我本来发这帖只是作为交流之用,并没有任何拽的意思,
能不能把你的游戏代码发出来我看看,能代表你现在的水平的代码。/

我就是真命天子,顺我者生,逆我者死!
2010-11-13 19:35
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
收藏
得分:0 
你多强大跟我没关系, 我不关心。/
第一次在 java版块发帖,发的是俄罗斯方块, 是的,我认为俄罗斯方块是最难的游戏了。
不知道能不能见识一下你的代码,


[ 本帖最后由 BlueGuy 于 2010-11-13 19:41 编辑 ]

我就是真命天子,顺我者生,逆我者死!
2010-11-13 19:38
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
收藏
得分:0 
画布背景背景透明化
做俄罗方块玩,一个画布当墙,一个画布当砖头,
setBackground(new Color(0x88ffffff,true))不管用,不知道咋整

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){}

}

我就是真命天子,顺我者生,逆我者死!
2010-11-13 19:46
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
收藏
得分:0 
我承认你确实比我强大很多,不过我对 java不感兴趣。/



我就是真命天子,顺我者生,逆我者死!
2010-11-13 19:52
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
收藏
得分:0 
本来想回去吃饭了,但我也忍不住回来说你一句:
你这代码是 典型的 "北大青鸟"的学生 才写的出来的代码,
简直就是一坨屎,还自我感觉良好,劝你少把这种垃圾代码往论坛里扔。
你想打击我来抬高你的身价? 回去把 c 语言学个半年再来。/

我就是真命天子,顺我者生,逆我者死!
2010-11-13 20:14
快速回复:xxx 人物和地图的移动
数据加载中...
 
   



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

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