因此,我正在用JAVA创建一个等距游戏;简而言之,它有一个由图块组成的地图,当用户在屏幕上拖动鼠标时,地图就会移动.为了给大家一个主意,目前看起来像这样:

在实际的原型版本之前,我构建了一个小的Java应用程序,该应用程序本身没有“ Game Loop”.唯一更新平铺地图位置的事件是鼠标拖动的事件侦听器,并且在移动更新后调用了repaint()方法.它工作正常,我可以选择“图块”并移动地图而不会出现问题.

从那时起,我用游戏状态管理器和真实的游戏循环来重建原型思维,以开发更像真实游戏引擎的东西.游戏循环代码如下所示:

init();

long start;

long elapsed;

long wait;

while(running){

start = System.nanoTime();

update();

draw();

drawToScreen();

elapsed = System.nanoTime() - start;

wait = targetTime - elapsed / 1000000;

if(wait < 0)wait = 5;

try{

Thread.sleep(wait);

} catch(Exception e) {

e.printStackTrace();

}

}

GameStateManager需要使用update()和draw()方法,因此我可以像较旧的原型一样绘制地图.当我在屏幕上拖动鼠标以便地图可以移动时,发生了问题.在我可以实际看到所有瓷砖最终位置之前的瓷砖之间移动的黑色背景的范围内,该动画变得非常怪异.

起初,我认为问题出在Game Loop线程和主类的事件侦听器之间并发,因为可以在JPanel试图绘制地图时调用mouseDragged事件.然后我在游戏循环代码中对此进行了测试:

SwingUtilities.invokeLater(new Runnable(){

public void run(){

draw();

drawToScreen();

}

});

//draw();

//drawToScreen();

现在,原型工作正常.

因此,我的问题是,这种性能是否很沉重,或者只是Java中的不良做法?另外,我的“并发”假设正确吗?这是我第一次使用Java处理线程,所以我真的不知道我是否以正确的方式处理了这个问题.

obs2:如果有人感兴趣,我工作的游戏循环逻辑基于pj644制作的youtube java教程,名为“ Java 2D Game Programming”.

obs3:对不起,如果问题太大,这是我第一次在此网站上发布问题!

java中swing循环_在Java游戏循环中使用“ SwingUtilities.invokeLa...相关推荐

  1. java项目----教务管理系统_基于Java的教务管理系统

    java项目----教务管理系统_基于Java的教务管理系统 2022-04-22 18:18·java基础 最近为客户开发了一套学校用教务管理系统,主要实现学生.课程.老师.选课等相关的信息化管理功 ...

  2. 用标号跳出当前多重嵌套循环是否继续执行循环_在Java中如何跳出当前的多重嵌套循环?...

    在学习编程的过程中,我觉得不止要获得课本的知识,更多的是通过学习技术知识提高解决问题的能力,这样我们才能走在最前方,更多Java专业知识,广州疯狂java培训为你讲解; 1.在java中如何跳出当前的 ...

  3. java swing 总结_对Java 中Swing的小总结

    最近把Swing里的内容稍微看了一下,Swing里的基本元素有: 1.容器 顶层容器 顶层容器常见的有两种: I.窗体(JFrame),它可以直接出现在系统桌面上,其它组件必须直接或间接借助顶层容器才 ...

  4. java递增不使用循环_[转]Java 8:不要再用循环了

    以下内容为转载,没有在jdk8中测试,具体业务场景是否存在BUG或使用需要注意的地方有待测试. ------------------分割线---------------------- 正如我之前所写的 ...

  5. java web swing 教程_好程序员Java教程解读什么是swing

    原标题:好程序员Java教程解读什么是swing 好程序员Java教程解读什么是swing,swing是java GUI应用程序,也就是java做的桌面应用.运行swing程序要求用户电脑上有java ...

  6. java解析xml实例_在java中使用dom解析xml的示例分析

    本篇文章介绍了,在java中使用dom解析xml的示例分析.需要的朋友参考下 dom是个功能强大的解析工具,适用于小文档 为什么这么说呢?因为它会把整篇xml文档装载进内存中,形成一颗文档对象树 总之 ...

  7. java设计连连看心得_基于Java的连连看游戏的设计与实现

    ComputerKnowledgeand Technology 电脑知识与技术 软件设计开发本栏目责任编辑:谢媛媛 第7卷第35期 (2011年12月) 9 基于Java的连连看游戏的设计与实现 陈珊 ...

  8. java中switch条件_关于java:你能在Android的switch-case中使用条件语句吗?

    在我的寻找中,我似乎找不到一个直截了当的肯定或否定.在android中,有没有一种在case switch中使用条件语句的方法?例如,年龄是一个int值: switch (age){ case (&g ...

  9. java graphics画圆_在Java中绘制一个漂亮的圆圈

    我正在使用 Java Graphics而且我一直在变得"丑陋". 这是我的Java程序所做的 这是在Matlab中做的同样的事情 我认为Java显然不像Matlab那样" ...

最新文章

  1. CSS 实现加载动画之四-圆点旋转
  2. linux 如何产生so文件,printf()函数 【转】Linux下gcc编译生成动态链接库*.so文件并调用它(2)...
  3. JEECG Framework 3.4.3 GA 版本发布
  4. php字符串中删除字符串函数,PHP 实现删除任意区间内字符串函数方法
  5. 朝鲜红星操作系统落后当今水准约10年
  6. 【Transformer】Transformer中16个注意力头一定要比1个注意力头效果好吗?
  7. java数组数据结构_Java数据结构一维数组的应用
  8. python对象、引用
  9. paip.hql的调试故障排查流程总结
  10. 调用OpenCVSharp进行拍照
  11. 算法分析与设计-线性时间选择详解(通俗易懂,含图解,附源码)(c++)
  12. AD9371,ADRV9009多路同步模块设计
  13. 微信公众号推送(Java)
  14. android root刷机包包,安卓ROOT卡刷包通用版【安致提供】
  15. c语言课程设计万年历查询,C语言课程设计——万年历.pdf
  16. 路由器下一跳地址怎么判断_三分钟了解路由器路由表
  17. 逆水寒服务器维护多长时间,逆水寒11月8日更新维护 更新时间内容介绍
  18. GitHub中国区前100名到底是什么样的人
  19. 使用命令行查看Windows系统激活信息
  20. QT鼠标悬停和点击功能

热门文章

  1. 连续4年财务造假 造假金额过亿!捧红杨幂的欢瑞世纪被重罚
  2. 小米手环4 NFC版将全渠道开售:垃圾分类超智能
  3. 一加7喜迎全局DC调光:长时间看屏不再“辣眼”
  4. 华为P Smart Z海外上架:搭载弹出式前置摄像头
  5. 疑似华为P30系列售价曝光:欧洲售价最高8400元
  6. 手机存储不足怎么办?用好这份清理指南你的手机还能再战三年
  7. “中国锦鲤” 信小呆辞职旅行,这辈子真的不用工作了?
  8. 聊聊Vue(前端Vue面试包过)【面试干货】
  9. 浅析tornado协程运行原理
  10. linux的awk命令如何用?