It’d come as a shock, however not all code works on the primary attempt. (Insert stunned copyright-safe yellow electrical rodent right here)
Because of this, most built-in growth environments (IDEs) embrace a debugger that permits the developer to identify and clear up points throughout the a number of growth iterations. That is illustrated by the next pseudocode:
whereas creating == true:
code
check
debug
When creating a recreation, nonetheless, there are different points to consider, similar to recreation stability or verifying behaviors that is perhaps too quick or refined to note throughout gameplay.
Give it some thought. You fastidiously crafted your recreation’s problem degree, so that you wish to ensure it’s as much as the problem. However how will you depend the variety of enemies in a recreation once they’re shifting round and capturing at you?
You may wish to test the sport stability. Is the variety of enemies spawned at a given instantaneous what you count on? Did the power-up add the injury enhance you anticipated?
These are just some of the questions you may wish to reply whereas testing your recreation. That is the place Godot’s debug instruments come in useful, serving to you check and confirm all that.
Getting Began
The instance mission is identical from the Publishing Your Godot Mission to itch.io tutorial. Nevertheless, for this text, the code was modified to reinforce the gameplay expertise. Sadly, the sport broke within the course of and that you must discover what’s unsuitable with it utilizing the debug instruments. How handy! :]
You’ll be able to obtain the mission utilizing the Obtain supplies hyperlinks on the high and backside of this text. Observe that this mission requires Godot 4.3 or newer to run.
The beginning mission has the identical construction as within the earlier article, however three information have modified: projectile.gd, enemy_ship.gd, and main_game.gd.
Now is an effective time to obtain and run the mission to assessment the way it’s working and see how the bugs affect the sport. The primary concern you’ll discover is that it’s unattainable to destroy the enemy ships, though they’ll destroy your ship, so it’s debugging time!
Overview of the Debug Instruments
Godot has a set of highly effective debug instruments you should utilize to assessment code for logic errors, or graphics for efficiency points, and even to get an x-ray of how the sport is utilizing its processing time.
Though there’s a Debug menu on the high of the display, this text will concentrate on the instruments accessible by the Debugger panel on the backside of the display, as a result of these are the instruments that collect info when executing the mission by the Run the mission button.
Debugger Panel
The debugger panel, situated on the backside of the display by default, is accessible from the Debugger possibility on the backside of the window, to the fitting of the Output possibility. The next image exhibits the debug panel:
On the panel’s high, you possibly can see just a few tabs. From left to proper, the tabs are:
- Stack hint: Exhibits the execution stack, the context and its variables, and permits for controlling how the sport executes throughout the debug session. You’ll be taught extra about this tab later on this article.
- Errors: Exhibits the error and warning messages throughout the recreation execution.
- Profiler: Exhibits which code is operating and the way it impacts the sport efficiency. You’ll be taught extra about this tab later on this article.
- Visible profiler: Shows a graph exhibiting which code is operating and the way a lot time it takes for execution. You’ll be taught extra about this tab later on this article.
- Screens: Comprises graphs of recreation info, similar to frames per second (fps), reminiscence utilization, scene nodes, and extra. The info from the debug session is saved even after the session is over, so it’s potential to assessment it even after execution.
- Video RAM: Exhibits an inventory of sources and the way a lot video RAM they use whereas operating, in addition to the grand whole on the high of the panel.
- Misc: Screens and identifies the management nodes clicked throughout runtime.
- Community Profiler: Comprises the checklist of all nodes speaking over Godot’s multiplayer API and the way a lot knowledge every certainly one of them acquired or despatched throughout the debug session.
This text focuses on tabs 1, 2, 3, 4 and 5. Nevertheless, be happy to look at the others utilizing the identical mission. A few of them, similar to Community Profiler gained’t have any attention-grabbing info, although, as the sport doesn’t use the multiplayer API in any level.
Utilizing Breakpoints
After executing the sport, you must have observed that the principle concern is that it’s unattainable to destroy the enemy ships. So, logically, there should be an issue with the perform invoked when damaging the enemy ships — possibly the ships don’t take injury when they need to?
To check if that is true, study the perform that offers injury to the enemies: open projectile.gd and discover the damage_body perform. The perform code is:
func damage_body(physique: Node2D) -> void:
# 1
physique.take_damage(3)
# 2
create_explosion()
# 3
queue_free()
This code does the next:
- When the bullet collides with the enemy ship, it reduces the ship’s well being by 3 factors;
- An explosion seems on the purpose the place the collision occurred;
- The bullet is faraway from reminiscence;
This can be a easy perform, and its logic appears to be right. How can it not be working? Wouldn’t it’s nice if there was a approach of getting a deeper have a look at how the code is working? That’s the place breakpoints are available in, permitting you to halt the code execution and dig deeper to find the issue.
Breakpoints
When analyzing code, the error won’t be apparent simply by trying on the code; you may want to take a look on the code throughout runtime. To just do that, you’ll want to make use of breakpoints and watches, which work collectively to help and confirm what the code is doing.
Once you outline a breakpoint, Godot is aware of it might want to execute the mission usually as much as that time. After that, it halts execution and means that you can management how briskly the code ought to execute, and allows you to see which code executes in case of conditionals or loops.
The outline ought to be form of summary now, however you’ll see that in observe it’s quite simple and useful!