我想在TIBasic制作一个简单的街机射击游戏,如Galaga。我已成功创建了一些代码,可让您在屏幕上水平移动角色(“X”),同时拍摄子弹,沿着垂直路径清除所有内容。但是,我遇到的问题是“岩石”应该从屏幕上掉下来并在击中时消失。当我射击岩石时,它被子弹清除,但随后继续沿着屏幕下降,直到它击中屏幕底部。这是岩石的代码:
//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”)是否在屏幕上的某个位置,以检查它是否在最后一次迭代中被子弹清除?或者,还有更好的方法?谢谢您的帮助!
看来你所拥有的代码并没有测试子弹是否和岩石在同一个地方。要进行此碰撞,您需要将岩石的“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(意味着它不存在)。如果你愿意,你也可以添加爆炸的文本版本,以赋予它更多的天赋。祝你的项目好运,我希望这有帮助!
在Ti-Basic中制作游戏时,有两个选项可供“屏幕”显示:计算器的文本屏幕,使用Disp和Output等功能,图形屏幕,使用Text,以及绘图函数,存储的图片以及pxl和pt函数。我不确定如何在屏幕上检查文本输出屏幕是否存在对象,但图形功能具有Pxl-Test功能:
:Pxl-Test(y,x)
其他人可能知道如何在文本屏幕上检查某些内容,但我建议切换到图形屏幕以使用此功能。
如果您要切换到使用图形输出,请注意以下事项:
:Text(row,col,output)
最后一个没有使用Pxl-Test功能的是它测试一组像素,而一个字母。现在让我们假装你只在你的程序中使用Rs和一个X(我不知道你是否做过),所以你应该在该角色上测试一个对该角色来说相对独特的点。
祝好运!