接个吻. 2022-02-25 00:43 采纳率: 93.1%
浏览 28

数组游戏地图怎么把玩家加到地图里

问题描述:从下面的paint草地和paint玩家其实已经发现问题了,画玩家位置的偏移值和画草方块的偏移值不匹配,会发生错位,图:

img


这个就是我想要解决的问题,到这里我需要先说一下至于我为什么要写角色移动偏移值为Indexx * 1而不是和草方块的一样*32,其实是因为Indexx 32时,角色移动很僵硬,就像是瞬移了一块一样,不知道大家有没有玩过老版推箱子,就特别像那种移动一下瞬移一大块,当然我为什么不直接让草地也变成1呢,那是因为地图会变成特别的小。我想的是让角色一点一点的移动,所以我特意的把玩家的位置偏移写少了,这样玩家移动时就像正常走一样,但问题也同时发生了,就上述所言的问题,其实我不说也能感觉到,假如这里是地图的边界的话会怎么样呢?

img


是的,玩家的位置才移动了一点点,就到边界了。

自己想到的方案:给playes玩家类加额外的x和y属性,让玩家在移动时先加x或y。

public void paint(Graphics g) {
        if (x <= 32 || y <= 32 || x >= -32 || y >= -32) {
            if (!recordLeft) {
                g.drawImage(currentRightState, Indexx * x, Indexy * y,ROLE_WIDTH,ROLE_HEIGHT,null);
            }else {
                g.drawImage(currentLeftState, Indexx * x, Indexy * y,ROLE_WIDTH,ROLE_HEIGHT,null);
            }
        }else {
            if (x <= 32) {
                x = 1;
            }else if(x >= -32) {
                x = -1;
            }else if (y <= 32) {
                y = 1;
            }else if(y >= 32) {
                y = -1;
            }
        }
}
public void move() {
      if(x <= 32 || y <= 32 || x >= -32 || y >= -32) {
            if (dir == Dir.LEFT) {
                x--;
            }else if (dir == Dir.RIGHT) {
                x++;
            }else if (dir == Dir.UP) {
                y--;
            }else if (dir == Dir.DOWN) {
                y++;
            }
      }else {//这里是对地图数组修改的代码}
}

然后在move方法和paint方法里写个判断判断x或y是否大于32,如果大于就在数组里面往某个位置挪动一个位置。想法可行,也确实是有这种效果,但可能是因为,

img

,paint刷新频率过快,导致有时可以正常对上,有时对不上。所以还是没能完全解决问题。大家帮我看看有没有其他方法可以解决?

图1:地图数组
1 ->边界;0 ->可移动区域;4 ->玩家
备注:因地图比较大,这里展示一部分,能理解就可以

static int[][] MapList = {
            {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
            {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
            {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
            {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
            {1,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
            {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
            {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
            {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
            {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
}

图2:paint草地的代码截图

img

图3:paint玩家的代码截图

img

  • 写回答

2条回答 默认 最新

  • 接个吻. 2022-02-25 01:06
    关注

    因为我目前只学了Java这个面向对象的语言,虽然会写HTML和js也可以独立完成一个中小项目的那种。但这些前端的东西总的而言还是有点单一的,所以我就想着能不能用Java做一个RPG小游戏出来,这段时间做这个小游戏也有在平台上问了三、四个问题,在制作这个游戏的过程也有不少人建议我直接用游戏引擎,但其实,对于面向对象的初学者我来讲,可能有点荒谬,但我还是耐不住好奇心想试试游戏在底层到底都做了什么物理算法,目前前面写了好几个基础的物理模拟,类似与碰撞检测,地图边界检测的镜头释放,npc自动寻路和自动攻击玩家,背包系统等等,但后面正式加入地图的时候问题就随之而来了,问题出来了,也稍微被问题点醒了一点,因为我发现我前面做的那些物理碰撞和地图边界,npcAI,在地图加进来的时候都用不上,后面发现了一个貌似可行的方法,就是直接把角色也变成地图的一部分,这样就可以在移动玩家时直接判断是否等于0值,如果是就可以走,反之,这样不就直接省去了很多繁琐的检测?所以希望可以授予一点点知识。

    评论

报告相同问题?

问题事件

  • 创建了问题 2月25日

悬赏问题

  • ¥15 c语言怎么用printf(“\b \b”)与getch()实现黑框里写入与删除?
  • ¥20 怎么用dlib库的算法识别小麦病虫害
  • ¥15 华为ensp模拟器中S5700交换机在配置过程中老是反复重启
  • ¥15 java写代码遇到问题,求帮助
  • ¥15 uniapp uview http 如何实现统一的请求异常信息提示?
  • ¥15 有了解d3和topogram.js库的吗?有偿请教
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?