浏览 6180 次
锁定老帖子 主题:圣诞俄罗斯 - 响应J2ME圈子
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2006-12-25
顺便,就把这个东东叫圣诞俄罗斯了,呵呵。 星期五说好写一个俄罗斯方块的Demo,响应J2ME圈子, 主要说明Model和View的分离,使Model通用可移稙。 这个周未全捐给这个小东东上了。 功能很简单,而且还有很多没实现, 道具功能没做完,网络版没写完等。 只在基本能运行了, 周未时间太短了,我已加大马力在写,还是心有余而力不足。 呵,本来要早上发上来的, 谁知一上班就被泰国那破服务器给整上了,现在才忙完。 只有纯文本的java的txt等,没有图片,声音文件等,所以很小。 也不依赖任何jar包,只要jdk1.4就够了。 界面是抄QQ的火拼俄罗斯,没侵权吧。 开发环境:Eclipse 运行环境:jdk1.4以上 运行命令: bin/单人版.bat bin/对战版.bat bin/网络版.bat 没做完,也懒得打成jar了。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2006-12-26
先问个小问题:
在做单机双人对战时,发现两人使有一个键盘,会使键盘映射无效, 即: 单人使用时,按住向左键不放,方块会不停的向左运动, 而双人使用时,一方按住键不放,只要另一方按了键,前面按住的键就不再有效,这样,双方都要不停的按键,而不能按住键不放。 以前在文曲星中,我们都是通过直接POKE键盘内存映像,使其产生假的按键值。Java中不能操作内存,不知怎么处理。 |
|
返回顶楼 | |
发表时间:2006-12-26
对于j2se的事件机制我不是很了解,
不过我觉得可能是你的程序处理不好吧, 比如j2se支持长按事件,你的问题好像是一个长按了, 而另外一个人有进行长按,这样会不会有冲突,然后你在程序里不能很好的去判断到底是那方面按了。可能这样会导致你没响应。 我也是乱说的。当参考吧 |
|
返回顶楼 | |
发表时间:2006-12-26
常用的方法是这样的:
做一个按键映射类 这个类大概是这样(伪代码) class MyKey { boolean left=false; boolean right=false; ... ... } 游戏如果有两个人 那么有两个 该类的对象 mykeyP1 ,mykeyP2 当玩家1按 "左"的时候 myKeyP1.up=true; 当玩家1放开 "左"的时候 myKeyP1.up=false; 当玩家2按(keyPressed) "左"的时候 myKeyP2.up=true; 当玩家2放开(keyReleased) "左"的时候 myKeyP2.up=false; 在游戏主程序中 游戏事件(例如方块左右移动) 不是直接由 java提供的KeyListener 来触发 而是有一个进程(通常就是游戏的主进程)在轮寻 所有的MyKey对象 然后根据他们的状态来决定动作 而java的 KeyListener 触发的是 MyKey对象 的状态的改变 其实我前一阵发的那个我大学时做的那个小游戏就用了类似的方法 |
|
返回顶楼 | |
发表时间:2006-12-26
再补充一下 上面的这个思路 其实是学习自一些很古老的 j2me游戏
midp1.0 时代的手机 不支持同时按下两个按键 这时候就可以通过上面的方法来实现 后来我看了很多相关的资料 即使不在j2me上 不在"不支持同时按下两个按键"的机器上 这种方法也是一个很好的按键处理机制 除了有效避免案件冲突外 还可以很好的做到 让游戏主体与运行平台的事件机制解耦 |
|
返回顶楼 | |
发表时间:2006-12-26
javatar 写道 先问个小问题:
以前在文曲星中,我们都是通过直接POKE键盘内存映像,使其产生假的按键值。Java中不能操作内存,不知怎么处理。 做过文曲星相关开发? 厉害 呵呵 看了你的代码 写的很好啊 我就不行了 啥模式都不会 向你学习 |
|
返回顶楼 | |
发表时间:2006-12-26
fins 写道 常用的方法是这样的: 做一个按键映射类 这个类大概是这样(伪代码) class MyKey { boolean left=false; boolean right=false; ... ... } 游戏如果有两个人 那么有两个 该类的对象 mykeyP1 ,mykeyP2 当玩家1按 "左"的时候 myKeyP1.up=true; 当玩家1放开 "左"的时候 myKeyP1.up=false; 当玩家2按(keyPressed) "左"的时候 myKeyP2.up=true; 当玩家2放开(keyReleased) "左"的时候 myKeyP2.up=false; 在游戏主程序中 游戏事件(例如方块左右移动) 不是直接由 java提供的KeyListener 来触发 而是有一个进程(通常就是游戏的主进程)在轮寻 所有的MyKey对象 然后根据他们的状态来决定动作 而java的 KeyListener 触发的是 MyKey对象 的状态的改变 其实我前一阵发的那个我大学时做的那个小游戏就用了类似的方法 太感谢你了,提供这么好的思路。 是应该想办法绕开系统的KeyEvent,自己定制规则。 但 fins 写道 而是有一个进程(通常就是游戏的主进程)在轮寻 所有的MyKey对象 还要考虑下, 如果主进程在不停的做事,和其它应用交互就会成问题,而且对系统repaint也会形成阻塞,除非全屏,不许用户离开。 其实用单任务作业的系统上时,才会用for轮寻. 哦,可能是我理解错了你的轮寻,总以为是for 在C#里面,可以向系统申请尽快重绘(而不是自己for循环调用),以达到递归轮寻。 这样也是不错的主意。可Java我没找到这样的API(知道的请指教一下)。 我的想法是java.awt.Robot可能可以帮上点忙,待研究。 |
|
返回顶楼 | |
发表时间:2006-12-26
没那么复杂
你可以看看我那个小程序 虽然是大学时写的 漏洞也很多 但是思路是一样的 就是在主线程的while里调用 或者其他任何一个调用repain之前的地方调用 |
|
返回顶楼 | |
发表时间:2006-12-27
看过你的程序了。大概清楚怎么回事了,thanks!
只是现在没空纠缠这些API细节了,我更关注于设计,呵呵。 有空把自己的思路写一下,给这么一个没价值的程序留点记忆。 |
|
返回顶楼 | |