Ti Basic 检查字符是否在屏幕位置
Tibasic check if character is on screen position
我正在尝试在 TIBasic 中制作一个像 Galaga 这样简单的街机射击游戏。我已经成功地创建了一些代码,可以让你在屏幕上水平移动你的角色("X"),同时发射一颗子弹,沿着它所经过的垂直路径清除所有东西。但是,我遇到了 "rocks" 的问题,它应该从屏幕上掉落并在被击中时消失。当我射击岩石时,它被子弹清除,但随后继续沿着屏幕向下移动,直到它击中屏幕底部。这是岩石的代码:
//outside the game loop:
1->R
//inside game loop:
If not(R=8)
Then
R+1->R
If R>1
Then
Output(E-1, 1, " " //removes last rock
End
Output(R, 1, "R" //replaces last rock with one below it (traveling towards the ground)
End
这段代码显然不会阻止"R"在被清除时继续向下移动屏幕(顺便说一句,我只是在子弹被清除的地方使用Output(...," ")
子弹击中的任何东西)。那么,我如何检查在游戏循环的最后一次迭代中石头是否被清除了?有没有办法检查某些东西("R")是否在屏幕上的某个位置,以检查它是否在上一次迭代中被子弹清除?或者,还有更好的方法?感谢您的帮助!
在 Ti-Basic 中制作游戏时,有 2 个选项可供 "screen" 使用:计算器的文本屏幕,使用 Disp 和 Output 等功能,以及图形屏幕,使用文本,以及绘图函数、存储图片以及 pxl 和 pt 函数。我不确定如何检查文本输出屏幕是否存在屏幕上的对象,但图形函数具有 Pxl-Test 函数:
:Pxl-Test(y,x)
其他人可能知道如何在文本屏幕上检查某些内容,但我建议切换到图形屏幕以使用此功能。
如果您要切换到使用图形输出,请注意以下几点:
文本函数为
:Text(row,col,output)
Row和col由Output函数切换
行和列在屏幕上以像素为单位进行测量,与键入字母所需的 space 相反
大多数字母为 3 像素宽,spaces 为 1 像素宽,因此需要多个 spaces 才能清除不需要的字符
您可能需要在程序的请求然后在最后恢复它们。
最后一个不使用Pxl-Test函数的是它测试一组像素,同时一个字母。现在让我们假设您在程序中只使用 Rs 和 X(我不知道您是否使用),因此您应该测试该字符上相对独特的一个点。
祝你好运!
您的代码似乎没有测试子弹是否与岩石在同一位置。要进行此碰撞,您需要将岩石的 "R" y 值与您显示的子弹的 y 值进行比较,并将岩石的 x 值(无论您如何存储)与项目符号的 x 值。如果两者相等,则它们发生碰撞,您可以 "delete" 通过将岩石设置为表示它不再存在的任何值来 "delete" 岩石。假设 R 是岩石的 y 值,S 是岩石的 x 值,Y 是子弹的 y 值,X 是子弹的 x 值,在移动岩石的代码中,我会把它放在某个地方:
:If R=Y and S=X
:DelVar R
//You could also delete the bullet here because it's "stopped" by the rock
此代码将测试两者是否发生碰撞并将 R 设置为 0(表示它不存在)。如果你愿意,你还可以添加文本版本的爆炸,让它更有个性。祝您的项目顺利,希望对您有所帮助!
我正在尝试在 TIBasic 中制作一个像 Galaga 这样简单的街机射击游戏。我已经成功地创建了一些代码,可以让你在屏幕上水平移动你的角色("X"),同时发射一颗子弹,沿着它所经过的垂直路径清除所有东西。但是,我遇到了 "rocks" 的问题,它应该从屏幕上掉落并在被击中时消失。当我射击岩石时,它被子弹清除,但随后继续沿着屏幕向下移动,直到它击中屏幕底部。这是岩石的代码:
//outside the game loop:
1->R
//inside game loop:
If not(R=8)
Then
R+1->R
If R>1
Then
Output(E-1, 1, " " //removes last rock
End
Output(R, 1, "R" //replaces last rock with one below it (traveling towards the ground)
End
这段代码显然不会阻止"R"在被清除时继续向下移动屏幕(顺便说一句,我只是在子弹被清除的地方使用Output(...," ")
子弹击中的任何东西)。那么,我如何检查在游戏循环的最后一次迭代中石头是否被清除了?有没有办法检查某些东西("R")是否在屏幕上的某个位置,以检查它是否在上一次迭代中被子弹清除?或者,还有更好的方法?感谢您的帮助!
在 Ti-Basic 中制作游戏时,有 2 个选项可供 "screen" 使用:计算器的文本屏幕,使用 Disp 和 Output 等功能,以及图形屏幕,使用文本,以及绘图函数、存储图片以及 pxl 和 pt 函数。我不确定如何检查文本输出屏幕是否存在屏幕上的对象,但图形函数具有 Pxl-Test 函数:
:Pxl-Test(y,x)
其他人可能知道如何在文本屏幕上检查某些内容,但我建议切换到图形屏幕以使用此功能。
如果您要切换到使用图形输出,请注意以下几点:
文本函数为
:Text(row,col,output)
Row和col由Output函数切换
行和列在屏幕上以像素为单位进行测量,与键入字母所需的 space 相反
大多数字母为 3 像素宽,spaces 为 1 像素宽,因此需要多个 spaces 才能清除不需要的字符
您可能需要在程序的请求然后在最后恢复它们。
最后一个不使用Pxl-Test函数的是它测试一组像素,同时一个字母。现在让我们假设您在程序中只使用 Rs 和 X(我不知道您是否使用),因此您应该测试该字符上相对独特的一个点。
祝你好运!
您的代码似乎没有测试子弹是否与岩石在同一位置。要进行此碰撞,您需要将岩石的 "R" y 值与您显示的子弹的 y 值进行比较,并将岩石的 x 值(无论您如何存储)与项目符号的 x 值。如果两者相等,则它们发生碰撞,您可以 "delete" 通过将岩石设置为表示它不再存在的任何值来 "delete" 岩石。假设 R 是岩石的 y 值,S 是岩石的 x 值,Y 是子弹的 y 值,X 是子弹的 x 值,在移动岩石的代码中,我会把它放在某个地方:
:If R=Y and S=X
:DelVar R
//You could also delete the bullet here because it's "stopped" by the rock
此代码将测试两者是否发生碰撞并将 R 设置为 0(表示它不存在)。如果你愿意,你还可以添加文本版本的爆炸,让它更有个性。祝您的项目顺利,希望对您有所帮助!