蓝图交互,light chaser里程碑更新

lightchaser blueprint

时隔1个月,我终于完成了light chaser蓝图交互的开发工作,这是一个很大的更新,也是light chaser的一个重要的里程碑。

今天我很高兴的宣布,light chaser正式支持蓝图交互!

什么是蓝图交互?

最早听说蓝图是在UE4中,蓝图是一种可视化编程的方案,它可以让你在不写代码的情况下,通过拖拽和连接节点来实现逻辑。蓝图的出现,让游戏开发者不需要编写代码,就可以实现游戏逻辑,这对于不懂编程的游戏开发者来说,是一个很大的福音。

而在数据可视化设计器中也会碰到相同的场景。制作出来的大屏需要各个组件进行相互操作。比如点击组件A的时候隐藏组件B。这是一个最简单的场景。

那么需要明白,我们这个场景下不是游戏开发,而是web应用。这种场景的蓝图交互到底是什么?

web交互的核心

蓝图交互。核心在于交互。而在web应用中交互的核心在于事件。所有web组件与用户的交互方式基本都是通过事件完成的,因此,这个场景下的蓝图交互就是通过拖拽和链接节点的方式来完成组件(web元素)之间的事件逻辑。

为什么要使用蓝图交互?

试想一下在没有蓝图交互的方案之前,我们是如何实现web组件之间的交互功能的?无非是手动写好处理函数,然后写死由谁来触发,作用于谁。亦或者是代码复用一下。将处理逻辑存储起来,实际使用的时候让用户手动选择处理函数。前者太硬编码,后者操作起来太麻烦。而蓝图交互的出现,让这一切变得简单。
使用蓝图,虽然也需要定义好事件规范和处理逻辑。但是交互上的体验是直观的。谁触发事件,作用于谁,一目了然。

相比于原始的处理方式,蓝图在交互体验和逻辑编排上对用户的友好程度都由极大的提高

交互预览

好的,让我来回答你的问题。以下是代码示例: ```python import rospy from geometry_msgs.msg import Twist from turtlesim.msg import Pose from math import pow, atan2, sqrt class TurtleChaser: def __init__(self): # 初始化ROS节点 rospy.init_node('turtle_chaser', anonymous=True) # 订阅小海龟1的位置 rospy.Subscriber('/turtle1/pose', Pose, self.update_pose) # 发布小海龟2的控制指令 self.velocity_publisher = rospy.Publisher('/turtle2/cmd_vel', Twist, queue_size=10) # 初始化小海龟2的位置 self.pose = Pose() self.pose.x = 1 self.pose.y = 1 # 初始化小海龟2的航向角 self.pose.theta = 0 # 初始化小海龟2的总里程 self.distance = 0 def update_pose(self, data): # 更新小海龟1的位置 self.pose1 = data def get_distance(self, x1, y1, x2, y2): # 计算两点之间的距离 return sqrt(pow((x1 - x2), 2) + pow((y1 - y2), 2)) def get_angle(self, x1, y1, x2, y2): # 计算两点之间的角度 return atan2(y1 - y2, x1 - x2) def move_turtle(self): # 控制小海龟2追逐小海龟1 vel_msg = Twist() # 设置线速度和角速度 vel_msg.linear.x = 1.5 * self.get_distance(self.pose.x, self.pose.y, self.pose1.x, self.pose1.y) vel_msg.angular.z = 4 * (self.get_angle(self.pose1.x, self.pose1.y, self.pose.x, self.pose.y) - self.pose.theta) # 发布控制指令 self.velocity_publisher.publish(vel_msg) # 更新小海龟2的位置和航向角 self.pose.x += vel_msg.linear.x * cos(vel_msg.angular.z) self.pose.y += vel_msg.linear.x * sin(vel_msg.angular.z) self.pose.theta += vel_msg.angular.z # 累计小海龟2的总里程 self.distance += vel_msg.linear.x def run(self): # 运行小海龟2的追逐程序 while not rospy.is_shutdown(): self.move_turtle() if __name__ == '__main__': try: turtle_chaser = TurtleChaser() turtle_chaser.run() except rospy.ROSInterruptException: pass ``` 这段代码实现了一个小海龟追逐程序,其中小海龟1使用键盘控制节点随机运动,小海龟2通过控制算法追逐小海龟1,并累计小海龟2的总里程。你可以将这段代码保存为一个Python文件,然后在终端中运行它,就可以看到小海龟2追逐小海龟1的过程了。 注意:这段代码中使用了ROS(机器人操作系统)的相关库,如果你不熟悉ROS的话,可能需要先学习一下ROS的基础知识。另外,这段代码中没有实现在(1,1)位置生成小海龟2的功能,你需要自己手动在仿真器中生成小海龟2。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值