我目前正在Java制作一个2D平台游戏。我是初学者,所以放轻松。我对游戏中的重力有问题。我在跌倒和跳跃时使用不同的变量。我使用平铺地图。所以让我们言归正传。我的跌倒方法是这样工作的——
if(collisionDown == false) {
characterY += fall;
fall ++;
{
落差等于4。如果collisionDown为真,它将重置回4。
我的跳跃方法几乎一样:
if(key.E == true && collisionDown == true) {
characterY -= jump;
jump --;
}
跳转等于 16。如果合众坠落为真,它将重置回 16。
现在的问题是:想象角色正在跳跃。它在空中,下降时characterY=下降;假设characterY=250,此时fall等于-15。字符下方的下一个实心分片从Y位置255开始。字符位于250,并且未检测到冲突,因此下一帧将15添加到字符Y,即250 15=265。此时,字符已“进入”位于Y 255位置的实心分片。
我已经“修复”了这个问题,因此角色会重新回到实体图块的顶部(这是可见且恼人的。)这不是完美的解决方案,因为它会在每次进入实体图块时减慢角色1帧的速度(这是因为它检测到左右碰撞,并且角色无法移动)。如果我能这样说的话,这个角色显然会口吃。
我需要一个解决那个问题的办法,但是我想不出任何办法。所以如果你提出建议,我会很高兴。谢谢你。
我通常处理这个的方法是预先检查运动:
private int moveDown(int fall){
if (isSolidBlock(characterX, characterY + fall)){
//Knowing the height of your block, calculate some kind of reduction. If your block height is 40, it's probably something like (characterY + fall)%40
fall = 4;
collisionDown = true;
return maxFallUntilSolidBlockReached();
}
fall++;
return fall;
}
private boolean isSolidBlock(int x, int y){
//Implement some kind of check if at (x,y) there's a solid block.
}
然后,只需进行秋季计算:
if(collisionDown == false) {
characterY += moveDown(fall);
}
我可能会使用下面这样的东西。
if(collisionDown == false) {
characterYnext = characterY + fall; //Get Next Position
if(NextMovementCollides()){ //Basically if next position is too far.
characterYnext += difference_between(CharacterY,Ground); //This should move the character to the ground state.
fall = 0; //No longer falling so reset the value.
}
else{characterY += fall; fall++;} //Otherwise continue falling like normal.
}
免责声明:我不是Java程序员,所以我的语法可能有点偏差。
这应该是可行的,只要在有意义的地方插入游戏逻辑即可。
我的问题是,我需要制作一个不断更新的GUI,因为我得到的值可以从数据库中更改,并且我在图形区域中遇到了一些问题。 我使用Graphics2D中的Drawline和Drawstring打印数据库中的值,这些字符串和线条移动并更改值,所以我需要调用repaint();使用计时器使它们出现在jpanel中,问题是repaint();不是在绘制之前移除背景中的旧绘画,而是当我完全调整所有更新的大小时。 我
主要内容:$ionicPlatform$ionicPlatform $ionicPlatform 用来检测当前的平台,以及诸如在PhoneGap/Cordova中覆盖Android后退按钮。 方法 有硬件的后退按钮的平台,可以用这种方法绑定到它。 参数 类型 详情 callback 当该事件发生时,触发回调函数。 移除后退按钮的监听事件。 参数 类型 详情 callback 最初绑定的监视器函数。 注册硬件后退按钮动作。当点击按钮时,
源码包准备 我们首先要在官网下载 OpenResty 的源码包。官网上会提供很多的版本,各个版本有什么不同也会有说明,我们可以按需选择下载。 笔者选择下载的源码包为 ngx_openresty-1.9.7.1.tar.gz。 相关依赖包的安装 首先你要安装 OpenResty 需要的多个库 请先配置好你的apt源,配置源的过程在这就不阐述了,然后执行以下命令安装OpenResty编译或运行时所需要
从包管理安装 OpenResty 现在提供了 CentOS 上的 官方包。 你只需运行下面的命令: sudo yum-config-manager --add-repo https://openresty.org/yum/cn/centos/OpenResty.repo sudo yum install openresty 如果一切顺利,OpenResty 应该已经安装好了。 接下来,我们就可以进
1、下载 Windows 版的 OpenResty 压缩包,这里我下载的是 openresty_for_windows_1.7.10.2001_64bit ,你也可以选择 32bit 的版本。如果你对源码感兴趣,下面是源码地址 https://github.com/LomoX-Offical/nginx-openresty-windows。 2、解压到要安装的目录,这里我选择D盘根目录,你可以根据
多平台支持 Mpx支持在多个小程序平台中进行增强,目前支持的小程序平台包括微信,支付宝,百度,qq和头条,不过自2.0版本后,Mpx支持了以微信增强语法为base的跨平台输出,实现了一套业务源码在多端输出运行的能力,大大提升了多小程序平台业务的开发效率,详情可以查看template增强特性 不同平台上的模板增强指令按照平台的指令风格进行设计,文档和代码示例为了方便统一采用微信小程序下的书写方式。