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