Why isn't my joystick's 2nd circle visible when it's a child node?

  • Thread starter Darkmisc
  • Start date
In summary, the issue of the joystick's second circle not being visible when it's a child node may arise from several factors, including improper hierarchy settings, rendering order, or visibility attributes. Ensuring that the child node is correctly positioned, has the appropriate settings, and is not obscured by other elements is crucial for it to display correctly. Additionally, checking the parent node's properties and any potential clipping issues can help resolve the visibility problem.
  • #1
Darkmisc
220
31
TL;DR Summary
My Godot game uses a touchscreen joystick comprising of two circles. One is the touchscreen area. The other is a smaller circle to show where the player is pressing. The smaller circle is visible when I run the joystick scene on its own, but not visible when the joystick is a child node.
Hi everyone

I'm using this code for a touchscreen joystick in my Godot game:
joystick:
extends CanvasLayer

var move_vector = Vector2(0, 0)
var joystick_active = false

func _input(event):
    if event is InputEventScreenTouch or event is InputEventScreenDrag:
        if $TouchScreenButton.is_pressed():
            move_vector = calculate_move_vector(event.position)
            joystick_active = true

            $InnerCircle.position = event.position
            $InnerCircle.visible = true
            
    if event is InputEventScreenTouch:
        if event.pressed == false:
            joystick_active = false
            Global.move_vector=Vector2(0,0)
            $InnerCircle.visible = false
            
  
func _physics_process(_delta):
    if joystick_active:
        Global.move_vector = move_vector
        emit_signal("use_move_vector", move_vector)

func calculate_move_vector(event_position):
    var texture_center = $TouchScreenButton.position + Vector2(100,600)
    return (event_position - texture_center).normalized()

The code works for controlling the player, but the InnerCircle sprite is only visible when I run the joystick scene on its own. When I run it as a child node of Player.tscn, InnerCircle doesn't appear, although the joystick still works fine.
1695774452337.png


InnerCircle (the black dot) is visible in the editor, but not when I run Player.tscn.

1695774502805.png


The same applies when I run Player.tscn as a child node of Level.tscn.

Does anyone know why this is happening? I'm stuck for ideas. I've tried making sure the joystick ("Node2D") is on top, but it's in a canvas layer, so nothing should be blocking it anyway. Thanks
 
Technology news on Phys.org
  • #2
Does the widget need focus to show the player dot?

Focus is when a widget is somehow selected by the user.

  • Checking visibility properties -- are both components set to visible
  • Verifying layer and Z-index settings -- check if the inner circle isn't hiding behind some component
  • Ensuring correct scale and position.
  • Checking collision shapes.
  • Reviewing the parent-child hierarchy.
 
  • Like
Likes Darkmisc

FAQ: Why isn't my joystick's 2nd circle visible when it's a child node?

Why isn't my joystick's 2nd circle visible when it's a child node?

One possible reason why the 2nd circle of your joystick is not visible when it's a child node could be due to its positioning or visibility properties being overridden by its parent node. Check the CSS styles of the parent node to ensure that it is not hiding or covering the 2nd circle.

Is the 2nd circle of the joystick being rendered off-screen?

It is also possible that the 2nd circle of the joystick is being rendered off-screen due to incorrect positioning or negative margins. Verify the positioning properties of the 2nd circle to ensure that it is within the visible area of the screen.

Are there any errors in the code that could be causing the 2nd circle to not display?

Check for any syntax errors or logical mistakes in the code that could be preventing the 2nd circle of the joystick from being displayed. Make sure that the necessary HTML elements and CSS styles are correctly implemented to render the 2nd circle.

Could the 2nd circle of the joystick be hidden due to z-index stacking order?

Another reason why the 2nd circle of the joystick may not be visible is if it is being hidden behind other elements on the page due to the z-index stacking order. Adjust the z-index values of the elements to ensure that the 2nd circle is not being overlapped or hidden by other elements.

Have you checked if the 2nd circle of the joystick is set to display:none or visibility:hidden?

Lastly, confirm that the 2nd circle of the joystick is not set to display:none or visibility:hidden in the CSS styles. If either of these properties is applied to the 2nd circle, it will not be visible on the screen. Remove or adjust these properties to make the 2nd circle visible.

Similar threads

Back
Top