我正在尝试在TIBasic制作一个简单的街机射击游戏,如Galaga。我已经成功创建了一些代码,可以让你在屏幕上水平移动你的角色(一个" X"),同时拍摄一个能够沿着垂直路径清除所有内容的子弹。但是,我遇到了" rock"应该从屏幕上掉下来并在击中时消失。当我射击岩石时,它被子弹清除,但随后继续沿着屏幕下降,直到它击中屏幕底部。这是岩石的代码:
//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")是否位于屏幕上的某个位置,以检查它是否在最后一次迭代中被子弹清除?或者,还有更好的方法?谢谢你的帮助!
答案 0 :(得分:3)
看来您所拥有的代码不会测试子弹是否与岩石位于同一位置。要进行此碰撞,您需要将岩石的“R”y值与您显示的子弹的y值进行比较,并将岩石的x值(无论您存储的是什么)与x进行比较 - 子弹的价值。如果两者相等,那么它们就会发生碰撞,您可以通过将其设置为任何值来“删除”岩石,表示它不再存在。假设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(表示它不存在)。如果你愿意,你也可以添加爆炸的文本版本,以赋予它更多的天赋。祝你的项目好运,我希望这有所帮助!
答案 1 :(得分:2)
在Ti-Basic中制作游戏时,有2个选项可以选择"屏幕"将它打开:计算器的文本屏幕,使用Disp和Output等功能,图形屏幕,使用Text,以及绘图功能,存储的图片以及pxl和pt功能。我不确定如何检查文本输出屏幕是否存在屏幕上的对象,但图形功能具有Pxl-Test功能:
:Pxl-Test(y,x)
其他人可能知道如何在文本屏幕上检查某些内容,但我建议切换到图表屏幕以使用此功能。
如果您要切换到使用图表输出,请注意以下事项:
文字功能
:Text(row,col,output)
从输出功能
行和列在屏幕上以像素为单位,而不是键入字母所需的空间
大多数字母宽3像素,空格宽1像素,因此需要多个空格才能清除不需要的字符
您可能需要禁用图形轴(格式菜单),y功能(VARS菜单,然后右侧为Y-VARS),以及在乞讨时的状态图(STAT PLOT菜单)程序然后在最后恢复它们。
最后一个没有使用Pxl-Test功能的是它测试一组像素,而一个字母。现在让我们假装你只在你的程序中使用R和一个X(我不知道你是否做过或不做),所以你应该在该角色上测试一个相对独特的点那个角色。
祝你好运!