[问题] Java 2D横向动作(跳跃与落下)撰写请教

楼主: toy9986619 (幻飘)   2016-05-25 17:29:16
各位板友好
小弟目前是大一生,期末有份Java视窗小游戏制作
我们小组讨论出来后,决定制作2D横向动作卷轴游戏(类似越南大战、或是Rabi-Ribi),
只打算做1~3关,可能不会做到很完整
然后我主要是负责程式撰写的部分,我没有带入什么引擎,目前都是Java本身的套件
先简述一下目前我所做的部分
我目前绘制画面的方法是
先将角色预先设定好在地图中的位置在哪,然后以角色为中心去绘制画面(包含地图)
地图的部分用阵列储存整数,然后用function去读取数字判断要贴上哪种图片
让物体左右移动也已经做出来了,障碍物判断暂时也已经做好了
然后开了两个执行绪,一个接收键盘指令,一个做画面绘制
然后我现在要做跳跃的部分遇到了困难
我想要达成的效果是:按下按键后,物体会上移两格,但是能看得到上移一格的时候
上移两格后,再开始落下
结果实作后发现,因为我把接收指令跟绘制画面用不同执行绪的关系
所以好像会先计算完毕之后才做绘制画面
(同一时间只会有一个执行绪执行中,没错吧?)
于是我把panel的repaint()方法安插在跳跃的程式码中,但是又好像是计算太快的关系
看不到上移一格的时候,又不知道该怎么做延迟
还有一个问题是,我想到不能单纯的把落下的部分放在跳跃后面
如果我从高处的平台平移到可以落下的地方,也要做到物体自动落下
所以我想到落下这一部份应该要移到背景永久执行(?
但是这部分不知道该怎么撰写
尝试撰写了while循环去做落下的程式码,做跳跃的时候会因为判断到可以落下
所以就执行落下,结果就是物体不断被压着,跳不起来了
也想请教这部分的设计该怎么处理
附上我的整份code,移动的部分在character.java
绘制画面跟接收键盘在WindowsUI.java
https://goo.gl/kDqDs4
感谢各位!
作者: realmeat (真肉)   2016-05-26 15:48:00
让他扣慢一点, 方法很多种
作者: cha122977 (CHA)   2016-05-27 21:35:00
用一个状态记录是不是在空中,在空中的话就往下跳跃达到最高点后再进行落下的判定
作者: kiwatami (悠游自在)   2016-05-28 08:37:00
没写过游戏 不过我觉得跟前台特效类似用一条执行绪跑 renderer 读参数绘制画面其他的控制参数 例如上下移动会有一个相对高度的参数用这个参数决定绘制的物件区域与座标以跳跃来说就是使用另一个执行绪负责跑跳跃的x, y座标变化的函数而 renderer 就针对这个座标绘制物件每一个执行绪互相独立才能接受复杂指令
作者: k47100014 (MIT_No.14)   2016-05-29 21:13:00
如果以真实世界来讲的话,你能够跳起来是因为你跳的力比引力拉你的力道还大。重力是一直存在的,不是跳到最高点才有重力拉你下来。
作者: kyleJ (资工人)   2016-06-19 01:55:00
设一个y代表现在高度,ay代表Y轴加速度,g=9.8代表重力加速按照视窗的习惯,往上是负,往下是正当跳起来的时候假设设ay=-10(往上加速),每1/60秒就把ay扣g/60=9.8/60这样大约一秒左右就会到达最高点ay=0,然后ay变成正数开始往下掉 你只要一直把ay的值每1/60秒跟y加在一起画出来就好

Links booklink

Contact Us: admin [ a t ] ucptt.com