当前位置: 首页 > 知识库问答 >
问题:

Pygame:以角色为中心的移动系统(类似暗黑破坏神II的点击移动)

岳玉书
2023-03-14

我目前正在使用Pygame开发一款新的RPG游戏(我的目标是学习如何使用面向对象编程)。几天前,我开始开发一个移动系统,玩家点击一个位置,角色精灵到达该位置并停止,检查精灵是否与鼠标位置“碰撞”。

然而,我很快发现这大大限制了世界大小(应用程序窗口大小)。

我开始研究制作一个移动系统,背景会相对于玩家移动,从而产生移动的错觉。

我设法通过创建一个变量跟踪我的背景地图位置来实现这一点。地图比应用程序窗口大得多。每次我想让我的玩家移动时,我都会通过玩家在相反方向的速度来抵消背景。

我的下一个问题是我不能让我的角色停止移动。。。因为角色精灵实际上从未到达鼠标单击的最后一个位置,因为移动的是背景,而不是角色精灵。

我正在考虑花一些时间在一个变量中编码,这个变量将跟踪角色精灵在移动时到达鼠标点击位置所需的位移量。由于背景以角色精灵的速度移动,因此需要尽可能多的背景在x和y方向上的位移才能将背景上单击的位置居中到屏幕中心的角色精灵。

可能是这样的:

If MOUSEBUTTON clicked:
   NM = set number of moves needed to reach the clicked position based on character sprite distance to click and character sprite speed.
If NM != 0:
   Move background image
Else:
   pass

这意味着当我的背景移动到角色精灵刚好位于玩家最初点击的背景区域时,移动将停止,因为NM==0。

我想我的问题是:这听起来是个好主意,还是处理其他精灵的移动和碰撞会是一场噩梦?Pygame中有更好的工具来实现这个移动系统吗?

我也可以用一个时钟算出这些动作需要多少秒。

我想最终的挑战是处理一个固定的参考点,让所有的东西都围绕着它移动,无论是关于这个固定的参考点,还是关于它们自己的参考点。e、 g.如果另外两个精灵彼此移动,并且玩家的角色也“移动”,那么其他两个精灵的移动将取决于另一个精灵的位置以及玩家角色移动引起的背景偏移。

一个有趣的话题,已经炸了我的大脑几个晚上!

谢谢你的建议!

共有1个答案

邴景山
2023-03-14

你实际上是在征求对游戏设计的意见。在我看来,没有什么是不可能的,所以请继续尝试您的编码。另外,看看分散在网络中的类似项目也是明智的。你可以在不重新发明轮子的情况下学到很多技巧。这是一个好的开始。

滚动迷你地图

 类似资料:
  • 在我正在做的一个程序中,我试图根据它们的RGB值将颜色分类为红色、橙色、黄色、绿色、蓝色或白色。我通过将给定的RGB值与每种颜色的恒定“理想”值进行比较,并在三维空间中找到最小欧氏距离来对它们进行分类。然而,当我分析的颜色来自黑暗图像时,我遇到了麻烦,因为当前程序很难在黑暗图像中区分橙色、黄色和红色。我应该如何解决这个问题?

  • 由于列表中最高角色的位置等于角色的数量,所以创建的每个角色都应该移动到完全相同的位置,从而将其下面的每个角色都低一个位置。 但这不是正在发生的事情。 在执行这些代码行并降低进程速度时(通过使用和/或),我看到了以下情况: null 如果您怀疑这是我的代码中根深蒂固的,请让我知道,因为我可以为您提供更多的细节。

  • eclipse for windows是否有一个暗色主题,它将滚动条和菜单栏的颜色也改为暗色? 在这篇文章中,我们可以看到漂亮的主题,但这些都是针对Mac OS的。对于Windows来说,黑色的主题看起来很难看,因为那些白色的滚动条和标题栏等等。真的!

  • 我过去曾与Kafka合作过一点,最近需要将部分数据管道移植到AWS Kinesis Stream上。现在我读到Kinesis实际上是Kafka的一个分支,并且有许多相似之处。 然而,我没有看到如何让多个消费者从同一个流中读取数据,每个消费者都有相应的偏移量。每个数据记录都有一个序列号,但我找不到特定于消费者的任何内容(Kafka组Id?)。 在同一个AWS Kinesis Stream上,真的有可

  • 我目前正在开发的一个新应用程序遇到了一个奇怪的问题,如果我将应用程序发送到后台(Home按钮),然后使用应用程序图标重新启动应用程序,除了根活动之外的所有活动都会被销毁(在日志中,我会获得所有活动的OnDestroy,除了调用OnResume的根活动)。 如果我将其发送到后台并从当前任务中恢复,它将恢复应用程序。 我已经将< code > Android:launch mode = " singl

  • 我目前正在通过斯坦福大学的编程方法论(2008)课程学习Java。我正在试图创建游戏突破,并试图目前动画桨,这是一个GRect类型的对象。这是我的代码: 问题是,如果我用鼠标移动拨片,它会很好地跟随,比我用键盘移动它要流畅得多。改变移动()方法中的值只会改变拨片移动的速度。 我尝试过谷歌搜索,人们做的一件事是逐渐增加和减少划桨移动的速度,但我不确定如何通过这个库正确实现这一点。以下是我的尝试: 在