问题标签 [game-boy-advance]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
422 浏览

android - 从内部 android 电话 api 读取 IMPI

我正在尝试从 ISIM 读取 IMPI(GBA 引导所需)。我尝试了以下代码片段:

但是这样调用 getIsimImpi() 会返回 null。我相信,这是由于创建了 IsimUiccRecords 的新实例,而不是使用适当的实例(我不确定如何检索一个)

是 IsimUiccRecords.java 源的链接

是否有可能使用反射来检索 IMPI?

我知道使用内部 API 可能会破坏不同版本的 android 上的代码,但这不是我关心的问题。

0 投票
1 回答
272 浏览

c - GBA 开发 - 仿射精灵每 90 度暂停一次,BG 不受影响

编辑:我已将程序简化为基础:https ://github.com/aidan-aidan/temp/blob/master/source/vpp.c

我已经在 gba-dev 论坛上发布了这个问题,但他们似乎已经死了,而且很多天后我都没有得到回复。

这是一个显示问题的视频:http: //youtu.be/8gweFiSobwc(与上面的代码不同,如果你想看,你可以运行 rom)

如您所见,BG 旋转不受影响,尽管它们使用相同的 LUT 并且它们的结构中具有相同的数据类型。

我重做了几次LUT都没有用,这个问题只是在切换到2048圈而不是256圈后才出现。

查看 VBA 中的内存查看器,我可以看到 pb 的行为与 pa 不同。pa 的范围从 0x0100 到 0,正如我所期望的那样(与 1 到 0 相同),但是当枪从中心线向右时,pb 的范围从 0 到 0x0096,但一旦它从中心线向左跳就跳到 0xFFFF . 我唯一能想到的是它会变成负数(这是有道理的,因为该角度的余弦应该导致负数),但我不完全理解补码,所以我不能确定。0“度”在枪的右侧是水平的。512 是九十度。

我已经包含了我能想到的所有内容,感谢您提供任何帮助。

谢谢!

0 投票
1 回答
480 浏览

c++ - 当玩家移动时,GameBoy Advance 对象没有显示在正确的位置

这可能需要一些时间来解释——在你阅读这篇文章的时候去吃点零食。

我正在为 C++ 中的 Gameboy Advance 开发一个 2D 益智平台游戏(我是一个相当新的程序员)。直到昨晚,我一直在制作一个物理引擎(只是一些轴对齐的边界框的东西),我正在使用 GBA 屏幕大小的级别进行测试。但是最终的游戏需要一个大于屏幕大小的关卡,所以我尝试实现一个系统,让GBA的屏幕跟随玩家,结果我必须绘制所有东西在屏幕上相对于屏幕的偏移量。

但是,当我显示可以在关卡中拾取和操作的立方体时,我遇到了麻烦。每当玩家移动时,屏幕上立方体的位置似乎会偏离它们在关卡中的实际位置。就像绘制立方体的位置是一个不同步的帧 - 当我在玩家移动时暂停游戏时,框会显示在完全正确的位置,但是当我取消暂停时,它们会漂移到玩家停止的位置再次移动。

我的类的简要描述 - 有一个名为 Object 的基类,它定义了 (x, y) 位置和宽度和高度,有一个继承自 Object 并添加速度分量的 Entity 类,以及一个继承自 Entity 的 Character 类并增加运动功能。我的播放器是一个角色对象,而我要拾取的立方体是一组实体对象。player 和 cubes 数组都是 Level 类的成员,它也继承自 Object。

我怀疑问题出在最后一个代码示例中,但是,为了完全理解我正在尝试做的事情,我以稍微更合乎逻辑的顺序排列了示例。

以下是 Level 的截断标题:

...和实体:

以下是我的主要游戏循环的相关部分:

由于暂停时精灵显示在正确位置的方式,我很确定问题不在于MoveObjects(),它决定了玩家和立方体在关卡中相对于关卡的位置。所以留下Draw()UpdateLevelObjects()

好的,Draw()。如果不是我的立方体显示不正确,而是它们所在的关卡和平台,我会提供这个(我认为这不是问题,但可能)。Draw()只调用一个相关函数,DrawBackground()

这不可避免地需要一些解释。我的平台以像素为单位,但显示为 8x8 像素的图块,因此我必须为这个循环划分它们的大小。SetTile()首先需要一个屏幕块编号。我用来显示平台的背景层是 64x64 瓦片,因此需要 2x2 个屏幕块,每个屏幕块 32x32 瓦片才能全部显示。屏幕块编号为 25-28。103 是我的瓷砖地图中的瓷砖编号。

这是UpdateLevelObjects()

这些REG_BG位是 GBA 的寄存器,允许背景层垂直和水平偏移多个像素。这些偏移量首先计算在DetermineBackgroundOffsets()

需要明确的是,width是指以像素为单位的关卡宽度,而SCREEN_WIDTH指的是GBA屏幕宽度的恒定值。另外,对于懒惰的重复感到抱歉。

这是ApplyEntityOffsets

基本上,当玩家位于关卡中间时,它会在屏幕上居中,并在屏幕碰到关卡边缘时允许它移动到边缘。至于立方体:

请耐心等待 - 我稍后会解释 512 和 256。这是GetScreenAxis()

OBJECT_OFFSET(512 和 256)是 GBA 特有的东西 - 将对象的 x 或 y 位置设置为负数不会正常执行您想要的操作 - 它会弄乱用于显示它的精灵。但是有一个技巧:如果你想设置一个负的 X 位置,你可以在负数上加上 512,精灵就会出现在正确的位置(例如,如果你打算将它设置为 -1,那么将它设置为512 + -1 = 511)。同样,添加 256 适用于负 Y 位置(这都是相对于屏幕,而不是级别)。最后一个 if 语句将立方体显示在屏幕之外,如果它们通常显示得更远的话,因为试图将它们显示得太远会导致出现故障方块,这也是 GBA 特定的东西。

如果您已经阅读了所有内容,那么您就是绝对的圣人。如果您能找到可能导致漂移的立方体的原因,我将非常感激。此外,任何一般改进我的代码的提示都将不胜感激。


编辑:GBA对象更新设置播放器和立方体位置的方式如下:

0 投票
0 回答
125 浏览

c++ - 如何在小视口上显示大滚动级别?

昨天问了一个问题,当关卡大于屏幕尺寸时,我在 C++ 2D GameBoy Advance 游戏中显示关卡时遇到的问题。但是,我可能有点具体了,所以我想更笼统地问这个问题。

尝试在小得多的屏幕(240x160 像素)上显示大的滚动级别(512x512 像素)的最简单方法是什么?

到目前为止对我的代码结构的简要描述:我有一个名为 Object 的基类,它定义了 (x, y) 位置和宽度和高度,有一个继承自 Object 并添加速度分量的 Entity 类,以及一个 Character 类继承自Entity,增加了运动功能。我的玩家是一个角色对象,我希望玩家拿起的盒子是一个实体对象数组。player 和 cubes 数组都是 Level 类的成员,它也继承自 Object。

到目前为止,我已经实现了一个在关卡与屏幕大小相同时运行良好的游戏——所有对象的位置都相对于它们在关卡中的位置存储。但是,当关卡在屏幕上发生偏移时,我很难弄清楚如何在正确的位置显示对象。我希望视口永远不会超出关卡,如果视口不在关卡边缘,则将播放器显示在屏幕中间。

我应该尝试使用几个简单的偏移变量来移动背景吗?如果是这样,应按什么顺序计算和应用偏移量?偏移量如何以不同的方式应用于播放器和盒子?或者,我应该尝试创建另一个对象作为视口的级别类的成员吗?我将如何使用它来计算偏移量?

提供的任何建议将不胜感激。

0 投票
1 回答
120 浏览

c - C中的Game Boy Advanced Home brew图像问题

我正在制作一个家庭 brew gba 游戏只是为了好玩,我遇到了一个小问题,我可以在屏幕上很好地绘制图像,并且我可以读取键输入,期望当我尝试在用户按下时显示不同的图像ENTER 映射到我正在使用的模拟器中的 START 按钮(Visual Boy Advanced)没有任何反应,当我编译游戏时没有错误,所以我不知道出了什么问题,请注意我刚刚进入这个和我知道的不多,我有人知道如何让它工作我会很高兴:D

这是我的代码:

ui.h 是我要显示的图像的头文件,ppic.h 是我在启动时显示的图像的头文件。

0 投票
2 回答
365 浏览

c - GameBoy Advance Homebrew 开发的语言选择

我正在阅读大量教程并想进入 GBA Homebrew

现在,我应该使用 C 还是汇编?我已经知道一点 C,但是 asm 对我来说并不难,而且我还是有兴趣学习它。

那么,是哪一个?

0 投票
1 回答
246 浏览

assembly - ARM汇编,第一条指令上传

我正在尝试学习 arm assemly,这将是我真正可以说我知道的第一种编程语言。实际上现在我首先学习机器语言,因为它对我来说更容易。

我的问题是:如何将第一条指令加载到处理器中?

我要进行实验的编程平台是一个gameboy Advance。它有一个 arm7tdmi 处理器,我没有闪存卡,所以我将使用我的 arduino 通过链接端口(连接到芯片的 d、di、do、dc 引脚)上传代码。我只需要帮助弄清楚如何上传任何程序。除了 arduino 的东西和 gameboy BIOS 之外,不使用任何其他人的软件。

所以我的问题是:如果我将 bios 芯片从 gba 中取出,我是否仍然可以通过这些引脚上传指令,或者处理器在启动后通常会在不同的地方寻找指令吗?还有它如何接受通信,我如何一次上传一条指令?

0 投票
1 回答
287 浏览

c++ - GBA C++:如何使用数组绘制多个动画像素?

我正在为模仿经典街机游戏“凤凰”的 GBA 模拟器编写游戏,其中一艘船向其上方的目标发射子弹。我目前的游戏运行良好,只是我希望能够一次发射多发子弹。

我创建了一个较小的源文件只是为了测试我可以如何做到这一点,所以没有砖块或船等,只有子弹的来源和背景颜色。

我试图通过创建一个包含 5 个“子弹”结构的数组来为包含五颗子弹的船创建一个“杂志”,每个结构都包含自己的 x 和 y 坐标。每个子弹还为其分配了一个布尔标志,以确定它是否被发射,当按下 A 时允许循环搜索数组以找到尚未发射的子弹并发射它。

我认为这会起作用,但由于我是初学者,我觉得我可能错过了一些东西。当它运行时,我可以发射一颗子弹,它会按预期在屏幕上显示动画,但我无法发射第二颗子弹,直到第一个子弹离开屏幕并将其标志重置为“假”。

也许您可以帮助我发现代码中的问题?

谢谢你。

0 投票
2 回答
68 浏览

c++ - 在 C++ 上更改 SetObject 中的变量的问题

我正在使用 notepad++ 为 GBA 创建一个基本的无尽亚军游戏。我的运行角色由精灵组成,我需要在主游戏循环内以设定的时间间隔自动更改,但我似乎找不到允许我这样做的方法,我知道下面的代码非常基本,但我认为逻辑它是合理的,它应该可以工作。我有四个精灵,它们通过以 2 的间隔更改运行变量来更改。提前感谢您的任何帮助。

0 投票
0 回答
211 浏览

c++ - 使用 sprite 和 setObject 在 C++ 上进行碰撞检测

我正在尝试创建一个非常基本的无尽跑步游戏玩家,但我被碰撞检测困住了。我正在使用 notepad++ 为 GBA 模拟器编程。下面的代码是我的主要游戏 while 循环。精灵是 4x4 瓦片,每个瓦片是 8x8 像素。主循环下方是重力作用于精灵的代码。'setObject(0,...) 是角色精灵 setObject(1,...) 是平台精灵。感谢您提前提供任何帮助。