Why does my if-statement not work when I have (x-100) instead of x?

  • Thread starter Thread starter Darkmisc
  • Start date Start date
  • Tags Tags
    godot
AI Thread Summary
The discussion centers on creating a shoot 'em up game where enemies fire at the player after a delay. The original code for enemy behavior was not firing shots as intended when using a condition that included a positional offset. The issue was resolved by modifying the firing condition to include a random value, ensuring the enemy would fire when it approached the player's position. Debugging tips were shared, emphasizing the importance of printing variable values to understand unexpected behavior. The final solution involved placing the firing condition within the physics process function, which allowed the enemy to successfully launch shots at the player.
Darkmisc
Messages
222
Reaction score
31
TL;DR Summary
I'd like enemies to fire a shot once they get behind the player. I have an if-statement to fire a shot if position<x. This works. However, the if-statement doesn't work if I write "if position<x-100".
Hi everyone

I'm making a shoot 'em up in which enemies travel right to left towards the player. If they get behind the player, they are supposed to fire a shot at the player.

The code below for the enemy works, but I'd like a slight delay before the shot is fired.

[CODE title="enemy"]func _physics_process(delta):


position+= speed*movement_vector*delta

if position.x <=Global.player_pos.x and shot_fired==false:
launch_proximity()
[/CODE]

[CODE title="shoot_laser" highlight="6"]func launch_proximity():
shot_fired=true
player_pos=Global.player_pos.x
shoot_pos = player_pos

if position.x<shoot_pos:
print("bam")
var child_node = $EnemyBarrel/Muzzle
Global.rot = $EnemyBarrel.rotation
var l = LASER.instance()

get_parent().add_child(laser_parent)
laser_parent.add_child(l)
l.global_position = child_node.global_position
l.rotation = $EnemyBarrel.rotation
add_child(l)[/CODE]

However, the enemy won't fire if I have this at line 6
[CODE title="line 6"] if position.x<shoot_pos -100:

[/CODE]Does anyone know why?

Thanks

EDIT: I have the player in the middle of the screen when the enemies pass, so I don't think it's because the enemies are off-screen by the time they are 100 pixels behind the player.

Also, I've used position.x<shoot_pos - rand_range(0, 200) and they've never fired with that code either.
 
Last edited:
Technology news on Phys.org
To debug this kind of problem, insert a line print(position.x, shoot_pos) before the test that is not doing what you expect. Edit: If it is still doing something strange, try print(type(position.x), type(shoot_pos)).

When you post code here, make sure you select an appropriate language: GDScript is based on Python, so use Python.

You will find that it is much easier to debug code if you use consistent spacing, so for instance
[CODE lang=Python title="shoot_laser" highlight="6"]func launch_proximity():
shot_fired = true
player_pos = Global.player_pos.x
shoot_pos = player_pos

if position.x < shoot_pos:
print("bam")
var child_node = $EnemyBarrel / Muzzle
Global.rot = $EnemyBarrel.rotation
var l = LASER.instance()

get_parent().add_child(laser_parent)
laser_parent.add_child(l)
l.global_position = child_node.global_position
l.rotation = $EnemyBarrel.rotation
add_child(l)
[/code]

It is a good idea to follow the Python style guide https://peps.python.org/pep-0008/.
 
  • Like
Likes berkeman, FactChecker and Darkmisc
I think some statements about GDscript operator precedence and short-circuit evaluation are a little vague.
This might be over-cautious and make no difference, but if things are acting strange, I would use more parentheses to force the operation order as you want it:
Python:
if ( position.x < (shoot_pos -100) ):
 
Last edited:
  • Like
Likes Darkmisc and phinds
Some general debugging advice:

1.State the language you are using - don't make us guess. This looks like a precedence problem, which can be language-specific.

2. Give us the shortest possible piece of code that shows the problem. Often the process of finding this also provides a strong hint as to the answer.
 
  • Like
Likes Darkmisc and FactChecker
Darkmisc said:
Also, I've used position.x<shoot_pos - rand_range(0, 200) and they've never fired with that code either.
Making it more complicated is not likely to help. A lot of things could go wrong. Is position.x global?
I see a recent edit. Have you tried any of our suggestions? Especially try @pbuk 's suggestion in post #2 to print the values of interest. When things are behaving strangely, it is often because the variable values are not what you expected.
 
Thanks. It works now.

This is the code I'm using

[CODE lang="python" title="func _physics_process(delta):" highlight="6"]func _physics_process(delta):
position+= speed*movement_vector*delta
if position.x + rand <=Global.player_pos.x and shot_fired==false:
launch_proximity()[/CODE]

[CODE lang="python" title="shoot_laser"]func launch_proximity():
shot_fired=true
var child_node = $EnemyBarrel/Muzzle
Global.rot = $EnemyBarrel.rotation
var l = LASER.instance()

get_parent().add_child(laser_parent)
laser_parent.add_child(l)
l.global_position = child_node.global_position
l.rotation = $EnemyBarrel.rotation
add_child(l)[/CODE]

I think I needed to have my if-statement in the physics process.
 
Last edited by a moderator:
Dear Peeps I have posted a few questions about programing on this sectio of the PF forum. I want to ask you veterans how you folks learn program in assembly and about computer architecture for the x86 family. In addition to finish learning C, I am also reading the book From bits to Gates to C and Beyond. In the book, it uses the mini LC3 assembly language. I also have books on assembly programming and computer architecture. The few famous ones i have are Computer Organization and...
I have a quick questions. I am going through a book on C programming on my own. Afterwards, I plan to go through something call data structures and algorithms on my own also in C. I also need to learn C++, Matlab and for personal interest Haskell. For the two topic of data structures and algorithms, I understand there are standard ones across all programming languages. After learning it through C, what would be the biggest issue when trying to implement the same data...

Similar threads

Back
Top