为了深入学习Java中GUI与事件处理机制,利用java中的GUI与事件处理机制等功能实现围棋小游戏。 效果图 一、概述 1、GUI是指图形用户界面也称图形用户接口,在Java中是进行人机交互的窗口,在这个窗口中用户可以实现应用程序提供的所有功能。事件处理机制在上一篇文章中有详细介绍,这里不多说明。 二、设计 (本人的设计思想是:先设计一个整体的框架,再往设计好的框架中加入组件,并一步步的进行调试,争取每步都在正确的路线上,各代码之间相互融合。) 1、逻辑设计  1)、首先创建一个顶级窗口容器类myframe,作为整体的框架。  2)、然后创建规则类Rule,加入到框...

  vVTRx3z6zETO   2023年11月02日   96   0   0

此次开发小游戏一共有18个经典小游戏,每天更新一个。跟大家一起学习一些经典小游戏的开发思路和算法,如果想直接看完整游戏效果的,相关的完整工程可以直接去我的资源里面下载。与大家一起学习Oneday. 今天这个是拼图小游戏 简单说一下拼图游戏: 拼图游戏是一款经典的益智类游戏,它的历史可以追溯到1760年左右,是英国的雕刻师和制图师把地图贴在硬纸板上,然后沿着国界线分割,制作成了最原始的拼图。最初的拼图游戏具有教育意义,拼图所用的图片多向人们传授历史或地理知识,后来五花八门的拼图游戏层出,不过大多都是有益于人们脑力的开发和训练记忆力提高动手能力的。 游戏规则: 将一张图片分成若干份(碎片),...

  vVTRx3z6zETO   2023年11月02日   62   0   0

现在市面上很多app上都有小游戏(或叫h5游戏),它们借助小游戏来提高整个app的粘性。像微信app、趣头条app、哈啰app上已经出现了小游戏模块。 用户聊天、刷资讯、骑车之余可以打开网络游戏休息放松,如果突然间来消息了或者玩游戏累了想看资讯,关闭游戏页面后,再次打开游戏是接着玩,不需要重新加载游戏。 如何实现这种效果呢? 我们知道activity关闭后,再次打开肯定要走onCreate生命周期,那么页面相关资源就要重建,这样就得重新加载游戏了。 微信小游戏是如何做到,关闭activity后,再次打开会保留之前的资源和状态呢? 实际上,微信小游戏关闭activity关不是finish掉了...

  vVTRx3z6zETO   2023年11月02日   50   0   0

现在市面上很多app上都有小游戏(或叫h5游戏),它们借助小游戏来提高整个app的粘性。像微信app、趣头条app、哈啰app上已经出现了小游戏模块。 用户聊天、刷资讯、骑车之余可以打开网络游戏休息放松,如果突然间来消息了或者玩游戏累了想看资讯,关闭游戏页面后,再次打开游戏是接着玩,不需要重新加载游戏。 如何实现这种效果呢? 我们知道activity关闭后,再次打开肯定要走onCreate生命周期,那么页面相关资源就要重建,这样就得重新加载游戏了。 微信小游戏是如何做到,关闭activity后,再次打开会保留之前的资源和状态呢? 实际上,微信小游戏关闭activity关不是finish掉了...

  vVTRx3z6zETO   2023年11月02日   117   0   0

今天实现的内容: 新增锁定输入 为输入模块添加锁定键和锁定信号,更新信号。 --- IPlayerInput     public bool lockOn; //锁定信号 --- JoystickInput     public MyButton buttonLockOn = new MyButton(); //锁定键      // Update...

  vVTRx3z6zETO   2023年11月02日   60   0   0

今天实现的内容: 动画机设计理念 要我说,动画机真的是老生常谈的东西了。做了好几次了,目前也就是将角色的地面动画做进去。设计理念就是使用混合树ground将地面移动动画统一管理起来。 动画机的运用及模型旋转 要运用动画机,需要将动画机和输入模块串接起来。所以我们需要新的脚本,没错,PlayerController。同样的,顺手解决角色的旋转功能,旋转的思路为直接修改模型的forward。 using System.Collections; using System.Collections.Generic; using UnityEngine; public...

  vVTRx3z6zETO   2023年11月02日   79   0   0

今天实现的内容: 跳跃信号 要实现跳跃,首先要实现跳跃的输入。跳跃信号是按下的当场触发的一次性触发控制(TriggerOnceSignal)。 public class PlayerInput : MonoBehaviour { ... // 一次性信号     public bool jump; //跳跃信号     public bool lastJump; //记录上一次的jump信号&nb...

  vVTRx3z6zETO   2023年11月02日   56   0   0

今天实现的内容: 加入降落动画 降落发生在跳跃之后,所以降落动画要紧接着跳跃动画播放,动画机如下。 这两条Transition都hasexittime,并且jump到fall的优先级高于jump到ground,因为目前为止这两个转换都没有条件。 在图示位置调整优先级。 落地检测的实现及相关动画运用 要实现落地检测,需要使用Physics.Overlap里的东西,使用Physics.Overlap可以找到某个形状范围内有重合的所有碰撞体。比如我们要用到的Physics.OverlapCapsule就是在一个给定的胶囊体内得到所有与胶囊体有重合的特定layer的碰撞体,Overlap只能得...

  vVTRx3z6zETO   2023年11月02日   91   0   0

今天实现的内容: 翻滚和跳跃的重新设计 按照黑魂游戏的设计,跳跃其实只有在跑起来时才能起跳,并且伴随翻滚动作,也就是说我们之前设计的主动向前跳跃的功能在黑魂游戏里是没有的,我们的设计要改。 现在的设计是将跳跃键替换为翻滚键,让翻滚取代跳跃,并且只有跑起来时按下翻滚键才能跳起来,并且在落地时会进行翻滚。 翻滚动画及触发逻辑 这是一个前滚翻的动画,需要将动画的Y轴位移也bakeintopose。 将动画直接加入到动画机。翻滚会发生在玩家主动按下翻滚键时进行,并且直接转换回ground。 转换条件是当玩家按下翻滚键时(原来是跳跃键),触发动画机参数roll。roll的触发告诉动画机进行转换。...

  vVTRx3z6zETO   2023年11月02日   69   0   0

今天实现的内容: 动画控制的重新设计 我们将彻底取消跳跃信号,改为使用与速度相关的forward参数来判断当前应该转换到哪个动画。 现在jump已经不再需要,可以删除了,也就不需要在代码中触发了,同时也就不用ClearSignal了。 后跳动画的加入 在黑魂游戏中,在原地站住不动时按下翻滚键,玩家会做出后跳的动作。我们加入这个新的动作。当forward小于0.1时,按下roll键会进行后跳。 现在,ground的转换优先级也要调整一下了,首先应该还是fall,然后因为我们是判断forward小于某个值,所以其次是jab,再其次是roll,最后才是jump。 后跳冲量 和翻滚一样,...

  vVTRx3z6zETO   2023年11月02日   66   0   0

今天实现的内容:黑魂游戏中后跳、翻滚、跳跃的键位设计在黑魂游戏中,后跳和翻滚是由一个键实现的,在站立不动时,按下(哪怕你是按住)该键会后跳。移动时单击该键会翻滚,按住该键时移动会奔跑。奔跑时按下跳跃键才能跳跃。最大的问题就是要区分同一个按键的单击和按住,我们将采用的方案为通过计算按下按键的时间来判断到底是按住了还是单击。而在键盘上,跳跃和后跳翻滚奔跑居然都是一个键(默认space),通过奔跑时快速再按下该键来实现跳跃,而手柄上连按两下该键是翻滚。 单击和按住的代码实现 //按键按压计时器 privatefloatpressTimer; //单击的间隔时间小于等于这个时间是单击大于这个时间...

  vVTRx3z6zETO   2023年11月02日   69   0   0

今天实现的内容: 鼠标输入 在没有引入手柄操作前,将由鼠标来控制摄像机旋转,首先我们要获取到鼠标输入。 publicclassPlayerInput:MonoBehaviour { //摄像机控制轴 publicstringcameraAxisX; publicstringcameraAxisY; //摄像机控制信号 publicfloatcameraUp; publicfloatcameraRight; //... voidUpdate() { //摄像机信号 cameraUp=Input.GetAxis(cameraAxisY); cameraRight=Input.GetA...

  vVTRx3z6zETO   2023年11月02日   95   0   0

前言 本篇博客旨在解决黑魂like游戏开发时遇到的一个问题,当我们的角色跳起来撞墙时,会卡在半空中。 而且由于在空中时我们是没用办法操作的,所以基本上就卡死了。 今天实现的内容:角色跳起来时的卡墙问题描述这个问题的描述如前言所述,问题产生的原因主要是因为在我们的角色控制器代码会在跳起来时锁死m_planarVec,而这时m_planarVec是有大小的,所以在FixedUpdate中会一直给刚体的速度赋值(m_rb.velocity=newVector3(m_planarVec.x,m_rb.velocity.y,m_planarVec.z)+m_thrustVec;),这本来是为了维持...

  vVTRx3z6zETO   2023年11月02日   73   0   0

今天实现的内容: 攻击动画层 为了加入新的攻击动画,我们要设计一个攻击动画层。新的动画层一是为了使老动画层不至于臃肿,而是为了配置AvatarMask。 配置AvatarMask 新建一个AvatarMask,我知道这里是多个AvatarMask。我们需要的是一个全身都被选择的Mask。将Mask放到动画层设置里面。 接下来要做的就是,在攻击时调整动画层权重。这要在代码中做到。在进入代码之前,给idle添加StateMachineBehaviour脚本FSMClearSignals。我们需要清除的是attack信号来防止累积。 攻击信号输入 和翻滚一样攻击属于一次性触发信号。由于使用...

  vVTRx3z6zETO   2023年11月02日   47   0   0

今天实现的内容: 新增攻击状态B 配置好我们的新动画,将其加入动画机。首先我们要将Rig中的如图所示的参数调整好了。 接下来,设置Animation页下的烘培,烘培旋转和Y轴,旋转根据Original,Y轴根据Feet。 要实现连续攻击,攻击B要连接到攻击A之后,在做攻击A动画时如果再次按下攻击键,就会从攻击A转换到攻击B,我们的转换条件是attack。 攻击A转换到攻击B要设置为优先转换。 最后,修改这个玩意(这叫什么来着?),我们不需要攻击A后面的收刀动作和攻击B前面的起刀动作,这样做就能“剪”掉这些不需要的动画了,也就是灰色部分。你也可以直接调整攻击B动画的起始位置。 新增...

  vVTRx3z6zETO   2023年11月02日   58   0   0

今天实现的内容: 通过代码运用动画自带的RootMotion 在这篇博客之前,攻击时是不会出现位移的,因为我们没有运用动画自带的RootMotion。为了更好的动画效果,我们接下来将会运用到RootMotion。 上图中,红色的标识指示了动画的RootMotion量(具体我也不是太懂,反正就是个量),当我们运用RootMotion时,系统会将RootMotion量套用到游戏对象的transform上,注意是Animator所在的游戏对象,我们的项目中,Animator被放到控制器次级的模型对象上,所以移动的只是模型。要使用RootMotion,我们需要设置Animator组件下的Appl...

  vVTRx3z6zETO   2023年11月02日   61   0   0

今天实现的内容: 镜像动画 黑魂游戏里,不会限制你用那只手拿武器,而我们的项目中,目前还只有右手攻击,接下来我们将通过镜像动画实现左手攻击。 选中动画节点,可以看到检视窗口中有一个Mirror选项,勾选Mirror我们的动画就会镜像反转。我们希望能通过脚本来控制它。 如果我们不勾选Mirror,而是勾选它后面的Parameter,我们就可以使用动画机参数(要是bool类型的)来控制它了,我们可以很轻松的在代码中控制动画机参数(anim.SetBool)。 新增一个bool型参数mirror来专门控制要镜像翻转的动画节点,在这里是我们的三个攻击动画。我们只需要控制mirror参数,就可...

  vVTRx3z6zETO   2023年11月02日   50   0   0

今天实现的内容: InputManager 要配置好手柄,我们将使用Unity自带的InputManager,这个系统能够很好的消除输入设备的差异,统一各项输入,还能自定义新输入,并提供了输入相关的参数可供修改。 仔细观察可以发现,默认的InputManager里每种输入形式都设置了两个。以Horizontal为例,其中一个是键盘输入,另一个是手柄输入,当我们使用键盘时,Horizontal得到的是使用键盘输入,换成手柄以后Horizontal会自动变成手柄,非常智能。当然如果你有意要区别手柄,你也可以将第二个Horizontal改个名字。下面的图展示了我设置的XBOX手柄输入设置。 ...

  vVTRx3z6zETO   2023年11月02日   68   0   0

前言之前制作摄像机时,我们曾经想使用SmoothDamp来实现摄像机延迟移动(摄像机博客的链接),但是造成了摄像机旋转时的抖动问题,今天的博客就是为了解决这个问题。 今天实现的内容:问题产生的原因在我们的代码中,摄像机位移使用了SmoothDamp,但是旋转却是直接欧拉角赋值,这导致了摄影机位置还没有调整完,旋转就已经到位了。想象一下这个过程,摄像机的视线中心在旋转时会偏移角色颈椎位置,这就产生了抖动。 //摄像机游戏对象的移动和旋转 cameraGO.transform.eulerAngles=this.transform.eulerAngles; 通过完全固定摄像机每帧的指向解决问题...

  vVTRx3z6zETO   2023年11月02日   61   0   0

今天实现的内容: 添加shieldHandle 在人物模型合适的位置添加shieldHandle作为盾牌的位置,如图所示。 防御的IK方案 由于原本的Idle动画在装上盾牌以后看上去就像举着盾牌,这里我们可以通过OnAnimatorIK方法调整手臂位置(旋转)将盾牌放下来。 在使用OnAnimatorIK之前,我们需要在动画层设置中打开IKPass,只有打开IKPass,OnAnimatorIK才会被系统调用。IKPass(IK通道?)可以当成动画机会不会真的去计算IK的开关,我们对骨骼位置的修改也要经过IKPass才行。 接下来,在模型游戏对象上挂载脚本,代码如下: usingS...

  vVTRx3z6zETO   2023年11月02日   51   0   0
关注 更多

空空如也 ~ ~

粉丝 更多

空空如也 ~ ~