- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在制作一个简单的游戏,该游戏旨在使用计算机的鼠标来控制其中的一个对象,但我很难让它按照我想要的方式运行。该对象(在本例中标记为“拳头”)旨在跟随鼠标在屏幕上的位置,直到某个常数(“到达”),然后它将继续跟随鼠标,但只有在最大值的范围内抵达。基本上,这个人的手会跟随您的鼠标到达一个点,但如果您的鼠标离得太远,他的手也不会从他的肩膀上扯下来。到目前为止,我的函数代码是这样的:
void FistPosition(int& player_x,int& player_y, int& fist_x, int& fist_y){ //Start
ALLEGRO_MOUSE_STATE mousepos;
al_get_mouse_state(&mousepos); //Get the mouse's x and y position
const int REACH = 150; //Define the maximum distance the fist can go.
int playerc_x = player_x + 62; //Define the x and y center of the player object
int playerc_y = player_y + 92;
double x_dist = abs(playerc_x - mousepos.x); //get the x and y distance between
double y_dist = abs(playerc_y - mousepos.y); //body and mouse
int mousedist = sqrt((x_dist * x_dist) + (y_dist * y_dist)); //define mouse distance
if (mousedist < REACH){ //If within bounds of reach, follow the mouse position exactly
fist_x = mousepos.x;
fist_y = mousepos.y;
}
else{
fist_x = mousepos.x - (mousepos.x - fist_x); //Otherwise it cannot leave the
fist_y = mousepos.y - (mousepos.y - fist_y); //maximum reach
}
return;
我现在遇到的主要问题是,当角色在关卡中移动时,当玩家走得太远时,手会留在后面并锁定在原位。我还希望拳头对象在距离达到 REACH 后继续移动,但要保持在相对鼠标位置之后定义的距离“圆圈”内,但我很难在脑海中创建逻辑。非常感谢您更有经验的人可以提供的任何帮助!
最佳答案
void FistPosition(int& player_x,int& player_y, int& fist_x, int& fist_y){ //Start
ALLEGRO_MOUSE_STATE mousepos;
al_get_mouse_state(&mousepos); //Get the mouse's x and y position
const int REACH = 150; //Define the maximum distance the fist can go.
int playerc_x = player_x + 62; //Define the x and y center of the player object
int playerc_y = player_y + 92;
double x_dist = mousepos.x - playerc_x; //get the x and y distance between
double y_dist = mousepos.y - playerc_y; //body and mouse
int mousedist = sqrt((x_dist * x_dist) + (y_dist * y_dist)); //define mouse distance
if (mousedist < REACH){ //If within bounds of reach, follow the mouse position exactly
fist_x = mousepos.x;
fist_y = mousepos.y;
}
else{
double angle = atan2(y_dist/xdist); //work out the angle to the mouse
fist_x = playerc_x + REACH*cos(angle);
fist_x = playerc_y + REACH*sin(angle);
}
return;
}
我做了一些改变:
abs()
函数并更改了 x_dist
和 y_dist
赋值中的项顺序。不需要绝对值(x*x
始终为正),它现在表示距离和方向(+x 向右等)。拳头
在最大范围内的位置详细说明:
2:atan2
与标准 atan
函数不同,它返回一个代表输入描述的扇区的角度。这使我们能够使用像“135 度”这样的角度,而不必计算角度的位置(从原点顺时针方向的第二个扇区)并为每个扇区添加 90 度。
3:只需使用 sin 和 cos 计算 radius = REACH
的位置
使用这些,拳头
应该会继续移动。
它以前没有:
fist_x = mousepos.x - (mousepos.x - fist_x);
fist_y = mousepos.y - (mousepos.y - fist_y);
mousepos
项抵消了,所以它真的只是:
//this line: mousepos.x - (mousepos.x - fist_x);
//is the same as: mousepos.x - mousepos.x + fist_x;
fist_x = fist_x;
fist_y = fist_y;
关于c++ - Allegro 和 C++ - 鼠标位置逻辑有困难,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26383604/
tuple :: (Integer a,Fractional b) => (a,b,String) tuple = (18,5.55,"Charana") 所以这是给我的错误 ‘Integer’ is
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 关闭 11 年前。 Improve thi
我已经习惯了python和django,但我最近开始学习java。由于工作原因我没有太多时间,所以错过了很多类(class),现在我有点困惑,我必须做作业。 编辑 该程序应该根据每个运动员在自行车和比
这是一个困难的问题,但对专业人士来说很容易。 我在 mysql 中有以下字段:产品名称、mycost、sellprice 和 stock。因为我需要知道每种产品对我的商店的投资有多少,所以我创建了以下
我有 3 个表,其中已包含以下行: TBL_TESTER_LIST id tester_type tester_name 1 LMX LMX-01 2 LMX
我想只使用 GridBagLayout 来布局组件,如图所示。 我已经尝试了几个约束,但它永远不会以预期的结果结束,所以我想知道仅使用 GridBagLayout 是否真的可行。难点在于C1、C2、C
我遇到了以下代码没有结果的问题。但是,如果我取消注释掉指定的行,并注释掉它起作用的 bind_param 行,但这不是破坏了 mysqli 的目的吗?我的 var_dump 给了我的字符串(1)“1”
这个问题在这里已经有了答案: a good python to exe compiler? [closed] (3 个答案) 关闭 9 年前。 有了我之前问题的一些有用答案(见下文),我决定再试一次
我正在使用 Hadoop 分析 GSOD 数据 (ftp://ftp.ncdc.noaa.gov/pub/data/gsod/)。我选择了 5 年来执行我的实验 (2005 - 2009)。我配置了一
我在我的 macOS 应用程序的设置面板中使用 NSGridView。我是这样设置的: class GeneralViewController: RootViewController { pr
我正在尝试使用以下代码在 PHP 中自动安装 WordPress 发行版: $base_dir = '/home/username/wordpress_location'; chdir($base_d
在 Node.js 中将图像转换为 Base64 字符串时,我遇到了一个非常令人困惑的问题 这是我的示例代码: app.get('/image', (req, res) => { ServerAP
我在尝试运行我的应用程序时遇到一些错误,这里是 logcat java.lang.RuntimeException: Unable to instantiate activity Componen
基本上,我正在努力创建一个管理团队和球员的 Java 程序。 根据我的理解,我会有一个团队和一个玩家类。在团队类中会有 get 和 set 方法,以及某种形式的集合来正确存储球员,例如数组列表?然后在
我仍在尝试找出 JavaSwing 中的 BorderLayout,这真的很令人沮丧。 我希望能够将一个 Pane 拆分为 3 个包含的子面板,但我不完全确定如何包含它。 这是我的游戏类,它包含面板
下面的表设计(完整的模式见下文)还有很多需要改进的地方,并且已经造成了许多困难,但是我无法找出如何最好地将它们规范化。这些表格的目的是: ICD9-提供CICD9和CDESC组合的主查找。每个组合在I
这是我的表格: AB元组表 C 表,其中包含 A.id 和 B.id 的条目 D 表,其中包含带有 C.id 的条目和一个 bool 字段“open” 我想计算 D 表中“open”= true 且具
我在 YouTube 上跟踪了一个相当旧的教程,在视频中他以这种方式使用了 mysql_result: return (mysql_result($result,0) == 1) ? true : f
我正在尝试创建一个左侧面板的页面。该面板有一个页眉、一个内容区域和一个页脚。主面板包装器 div 应该是页面高度的 100%。页眉和页脚没有指定的高度,因为我只希望它们足够大以容纳其文本和填充,而我希
我有 TreeView ,我想在其中显示用户通过 file_dialog.getOpenFileNames() 选择的文件; file_dialog 是 QFileDialog。我确实创建了模型类:
我是一名优秀的程序员,十分优秀!