Looks like you're not logged in

Login or Register to continue

Lesson Q&A

Use this space for questions related to what you're learning. For any other type of support (website, learning platform, payments, etc...) please get in touch using the contact form.

  • Are you fine with me finding other ways to do some of the things?bogus-craneI used the code ```gdscript extends Sprite2D var max_speed := 600.0 var velocity := Vector2(0, 0) func _process(delta: float) -> void: var direction := Vector2(0, 0) direction.x = Input.get_axis("move_left", "move_right") direction.y = Input.get_axis("move_up", "move_down") if direction.length() > 1.0: direction = direction.normalized() velocity = direction * max_speed position += velocity * delta if direction != Vector2(0, 0): rotation = velocity.angle() ``` to do this. 2 7 Jun. 27, 2024
  • My (newbie) code comments to anyone who may have issuesNekrys```gdscript extends Sprite2D var max_speed := 600.0 # ':=' defines automaticly the var type var velocity := Vector2(0,0) func _process(delta: float) -> void: #defines the inputs up, down, left and right on the vector 'direction' (split between the X and Y axels) var direction := Vector2(0,0) direction.x = Input.get_axis("move_left", "move_right") direction.y = Input.get_axis("move_up","move_down") #Gets the length of the vector direction (by using .length) and if it is bigger then 1 #then normalizes it (divides its value by itself to get a final value of 1) #this allows for diagonals not be faster than going up, down, left and right if direction.length() > 1.0: direction = direction.normalized() #[vetor] velocidade = [vector]direção * max speed velocity = direction * max_speed #moves the character each frame. #Speed is a constant that is part of the velocity variable (direction* max_speed) wich then gets multiplied by delta to calculate the amount moved in a single frame position += velocity * delta #keeps the sprite looking to the last direction if direction.length() > 0.0: rotation = velocity.angle() ``` 2 4 Apr. 21, 2024
  • End direction when moving diagonallyHilton184When moving diagonally and then stopping, the ship typically does not finish facing diagonally. For example, when moving towards the top right (holding down W and D) -> ship moves diagonally. Release the keys and the ship will end up facing either UP or RIGHT. This is unless you release W and D at exactly the same time. If they are released even slightly apart, the ship won't finish facing diagonally, and it looks really jerky / not natural. How can this be fixed? 4 4 Feb. 16, 2024
  • Having trouble understanding how the code makes the ship retain its anglefamiliar-camelif direction.length() > 0.0: >| rotation = velocityangle() Im not really sure how this causes the ship to retain the angle. could someone please elaborate? 2 3 Apr. 15, 2024
  • Making movement smoother for Controller?HollowWhen testing with a controller joystick I noticed that the movement feels very stiff (due to the limit to 8 directions I presume). I was wondering how it could be made that the ship more smoothly transitions between directions / that it is not limited to the 8 directions? 3 2 Feb. 13, 2024
  • What is the purpose of :=mrpizzahunterFor example in: `var velocity := Vector2(0, 0)` Why not just use the = symbol? 6 2 Feb. 05, 2024
  • Why does the ship move faster when going diagonally?front-pantherI'm completely new to coding, and the part I'm struggling to comprehend is why does it become 40% faster. I'm not really understanding the math here. I don't think it's really important to know as of right now, but I'm really curious. 14 1 Feb. 15, 2024
  • Controller joystick + diagonal speedmiiaSo when using WASD, not normalizing the vector is indeed faster. But when using a joystick on my PS5 controller, diagonal movement feels much slower. Why would this be? 6 1 Feb. 04, 2024
  • L3.P1 - Different input string namesjumbo-lionNot a big deal, but in the essence of thinking independently and not just copy/paste the code, I named my inputs differently and had to redo it to pass the practice. Curious if it would be possible to simply check if the character was moving, or using input event checks on the backend, rather than checking the specific input string name. Also, maybe I am jumping ahead, but hoping we'll learn the difference between const and vars. Being a noob coder, it would be great to have real examples of when to use one over the other. Great lessons so far! I am loving the text + gif style so I can listen to music and go at my own pace instead of just watching someone else code. Thank you! 1 0 Dec. 20, 2024
  • Is L3P2 broken?diligent-octopusHey, i wrote the code for the second Practice as it is recommend in the solution, but get now green mark, that i done it right... OR anynone here, who see my mistake? :/ The essential code: ```gdscript if direction.length() > 1.0: direction = direction.normalized() ``` The whole code: ```gdscript extends Sprite2D var max_speed := 600.0 var velocity := Vector2(0, 0) var direction := Vector2(0, 0) func _process(delta: float) -> void: direction.x = Input.get_axis("move_left", "move_right") direction.y = Input.get_axis("move_up", "move_down") # If we don't do this and the player moves diagonally, they will move 40% # faster than normal. if direction.length() > 1.0: direction = direction.normalized() velocity = direction * max_speed position += velocity * delta if direction.length() > 0.0: rotation = velocity.angle() ``` 5 0 Dec. 08, 2024
  • about velocity and directionrifqilubis Why: velocity = direction * max_speed position += velocity * delta why not just: position += direction * max_speed * delta 1 0 Nov. 29, 2024
  • velocity.angle() vs direction.angle()CadenzaIn Is there fundamentally any difference between choosing to use the velocity variable over the direction variable? They both appear to produce the same result at this stage. 1 0 Nov. 24, 2024
  • About normalized...pointed-minkI understand the conclusion from the L3 that it's possible to maintain a consistent speed, but there's still something about the process that I don't fully understand. Specifically, it's about `normalized()`. After executing `direction = direction.normalized()`, the value of the `direction` variable becomes something like `(0.7, 0.7)`. When multiplying this by the `max_speed` variable, wouldn’t this reduce the actual speed?? I did confirm via `print()` that the length is 1 (close to 1 with a small floating-point value), but isn't the `direction` variable still holds the value `(0.7, 0.7)`? So, I don’t understand why multiplying this by `max_speed` automatically ensures the final speed equals `max_speed`. Please help my doo doo brain understand this concept. 2 0 Nov. 24, 2024
  • M4 / L3 Velocity comprehension problemRevHello sir, i have a hard time understanding this part of the lesson : ```gdscript extends Sprite2D var velocity := Vector2(500, 0) func _process(delta: float) -> void: position += velocity * delta rotation = velocity.angle() ``` > Because a velocity represents a speed in a given direction, we can decompose the `velocity` into two values: > The direction is a `Vector2` value with a maximum length of one. It corresponds to the orientation of the `velocity` vector. > The speed is a decimal number representing the velocity vector's desired length. It corresponds to the `velocity` vector's length. > We can calculate the velocity vector by multiplying a direction vector by a speed value. Multiplying a direction vector by a speed value produces a new vector with the same direction as the direction vector but with a length equal to the speed value. I thought I understood that the Variable " velocity " includes a Vector2 as a Value which contains both the direction and speed of our ship but I'm not really sure anymore with the explanations that follow. I don't understand when you say that the direction is a Vector2 value with a maximum length of one. What does a maximum length of one represent ? In the example above, I thought that the direction was equal to the Vector2 Value ( 500, 0 ) of the velocity variable but I'm not sure of anything now. Right after you say that it corresponds to the orientation of the velocity. We agree that the orientation corresponds to the direction of our ship and not to the rotation ? I also don't understand when you say, the speed is a decimal number representing the velocity vector's desired length. It corresponds to the velocity vector's length. What decimal number are you talking about? I thought that the speed was also equal to the Value of the Vector2 (500, 0) but the Vector2 of the variable " velocity " does not contain a decimal number. Should I consider the numbers ( 500, 0 ) of the Vector2 of the variable "velocity" as decimal numbers as well? I also don't understand when you say that it represents the desired length of the Vector velocity and that it corresponds to the length of the Vector velocity. I've been trying to understand my mistakes and unravel the situation for several days but I can't do it. I would really like to succeed in assimilating this concept, otherwise I think that if I pass this passage I risk understanding less and less of the rest. You propose below to do the course SG1: introduction to vector math for the game developers, should I do it before continuing the L3 lesson? I have followed the entire M3 Learning GDScript lesson but the SG1 course could perhaps unblock the situation for me? I apologize for all these questions. I'm starting to get lost among all the information, a little help would not be refused please! Thank you. 1 0 Nov. 22, 2024
  • Why does the Position code require adding?surprised-stinkbugposition += velocity * delta and position = velocity * delta both **seem** to give the same results when I run the program. What's the difference? 1 0 Nov. 19, 2024
  • Does normalizing vector longer then 1.0 makes analog control inconsistent?eelSkillzIf I understand correctly if I tilt my controler joystick fully to the right the input vector will be of length `1.0`. Now, when I tilt the controller to the top right it's length will be `~1.4`, right? If that's the case, doesn't tilting the controller ~70% to the top right give me a vector of length equal to `1`? If that is the case, then tilting the joystick 100% to the right would result in movement with speed equal to the speed of movement when tilting the joystick only ~70% diagonally. Now, when I'm writing this it occurs to me that the maximum input vector length from a controller is `1.0`. Meaning that at a full diagonall tilt the controller will input a vector of length `1.0`, so something along the lines of a `~Vector2(0.7, 0.7)`. Is that right? Anyway, I'm still posting this in case anyone else falls into this particular rabbit hole. 1 0 Nov. 15, 2024
  • L3. curious questionNormalAs stated in this lesson that the 'get axis' makes the value between -1 and 1. The decimal values between -1 and 1 are for controllers, right? like the pressure sensitive triggers 2 0 Nov. 13, 2024
  • Course compatible using C# instead of GDScriptprobable-antNot a question, but for anyone out here curious: If you want to use C# instead of GDScript and wonder if the Plugin will still recognize it: Yes, it does. I've passed the test using C#, even with a little different approach and got my little dopamine kick with the green checkmarks. Just keep in mind to use the exact var names like in the course. I named max_speed for example maxSpeed and it threw me an error, but worked, as soon as I used the right name. 3 0 Nov. 06, 2024
  • L3.P1 and L3.P2. Code is corrrect and ship matches referances but test still failsknotty-wormSo I'm using the the code blow. on P1 reference will move and I can control the reference on the right but the left one won't move at all so test fail. For P2 both left and right are in perfect sync with the same code below but the test again fail. feels like hitting some kind of bug. testing the code manually shows that it meets all the requirements I'm on linux using version 0.2 of the gdquest pratice pluging. output window reports that the version godot you shipped in the zipfile is v4.3.stable.official.77dcf97d8 only none standar thing I have is that I have a vim keybinds plugging because after more then 10 years of using vim moving in the editor with arrows feel so wrong ```gdscript extends Sprite2D var max_speed := 600.0 var velocity := Vector2(0, 0) var direction := Vector2(0, 0) func _process(delta: float) -> void: direction.x = Input.get_axis("move_left", "move_right") direction.y = Input.get_axis("move_up", "move_down") # If we don't do this and the player moves diagonally, they will move 40% # faster than normal. if direction.length() > 1.0: direction = direction.normalized() velocity = direction * max_speed position += velocity * delta if direction != Vector2(0, 0): rotation = velocity.angle() ``` 8 0 Nov. 05, 2024
  • Error in L3.P2violet-shrewI copied and pasted the solution for L3.P2 into character_diagonals and yet it fails the "direction vector is never longer than 1" check. ```gdscript extends Sprite2D var max_speed := 600.0 var velocity := Vector2(0, 0) # Once again, the direction variable is outside the _process() function so the # practice testing code can read its value. var direction := Vector2(0, 0) func _process(delta: float) -> void: direction.x = Input.get_axis("move_left", "move_right") direction.y = Input.get_axis("move_up", "move_down") # The character is way too fast, but only when moving diagonally! # Add code to prevent that. if direction.length() > 1.0: # direction = direction.normalized() # velocity = direction * max_speed position += velocity * delta if velocity.length() > 0.0: rotation = velocity.angle() ``` 1 0 Nov. 02, 2024
  • I can't open L3.P1well-off-apeWhen I try to start the practice, it just opens the same code I was working on. Can you help me? 1 0 Oct. 30, 2024
  • L3.P2 エラーbeloved-porcupineHello, I got following error after running L2.P2 test > Direction vector is never longer than 1 > Velocity vector is never longer than max speed I tried to fix the test.gd line #74 as previous post, but It didn't work My code is below: ```gdscript extends Sprite2D var max_speed := 600.0 var velocity := Vector2(0, 0) # For this practice, we moved the direction vector outside the _process() function. # This allows the interactive practice to read its value and test if your code passes! # You can access and change the direction variable inside the _process() function as you did in the lesson. func _process(delta: float) -> void: # The direction is always equal to Vector2(0, 0)! Add code to remedy that. var direction := Vector2(0, 0) direction.x = Input.get_axis("move_left","move_right") direction.y = Input.get_axis("move_up", "move_down") if direction.length() > 1.0: direction = direction.normalized() velocity = direction * max_speed position += velocity * delta if velocity.length() > 0.0: rotation = velocity.angle() ``` 2 0 Oct. 20, 2024
  • test error in L3.P2orderly-woodcockwith this code: ```gdscript extends Sprite2D var max_speed := 600.0 var velocity := Vector2(0, 0) # ... var direction := Vector2(0, 0) func _process(delta: float) -> void: # The direction is always equal to Vector2(0, 0)! Add code to remedy that. direction.x = Input.get_axis("move_left", "move_right") direction.y = Input.get_axis("move_up", "move_down") if direction.length() > 1.0: direction = direction.normalized() velocity = direction * max_speed position += velocity * delta if velocity.length() > 0.0: rotation = velocity.angle() ``` I get "Direction vector is never longer than 1" error during the testing, which is not true as direction is normalized. I tried also with Input.get_vector, same error. 3 0 Oct. 15, 2024
  • Wasn't able to get L3 P2 to work despite directly copying the answer from the soloutions pagedftgyhgjgyfHey, I tried solving the practice and was pretty sure I got it, but i kept getting an error inside the program that I had to normalize the Vector, despite having done so. I decided to check the soloutions page and directly copied it (to try and figure out what i'm missing) in but I still got the error [https://imgur.com/ctd7NxQ](https://imgur.com/ctd7NxQ) 9 0 Oct. 11, 2024
  • The line "With this code change, run the scene again, and now the ship's speed should be consistent even when moving diagonally." doesn't seem to fit where it's placed.dftgyhgjgyfIt's placed right after fixing the rotation, not after fixing the extra speed with diagonal movement which is weird as the rotation issue affects all movement, not just diagonal. It seems as if it was moved from the end of "Normalizing the vector" section. Of course I could be completely wrong but just letting you know in case the placement is unintentional 1 0 Oct. 11, 2024
  • Doing Input differentlySkits```gdscript Some of the things I picked up before buying this gamedev from zero. Vector2.ZERO is the same as Vector2(0, 0) extends Sprite2D var max_speed := 600.0 var velocity := Vector2.ZERO func _process(delta: float) -> void: var direction := Vector2.ZERO direction.x = -Input.get_action_strength("move_left") + Input.get_action_strength("move_right") direction.y = Input.get_action_strength("move_down") - Input.get_action_strength("move_up") if direction.length() > 1.0: direction = direction.normalized() velocity = direction * max_speed position += velocity * delta #position += speed * delta if direction.length() > 0.0: rotation = velocity.angle() ``` 4 0 Oct. 07, 2024
  • Bug: Godot freezes when clicking outside Event Configuration windowCM66When entering the input maps, if you click the plus sign to add event to an action, a window pops up to listen for input (Event Configuration). If you click outside of this window, the window will close and Godot will freeze. You can't close the input map window or Godot itself. I had to use Task Manager to close Godot. This only happens with the Godot application that comes with the files you download for this course. If you do this using the Godot application you download from the Godot website, the window will stay open. I was confused why this was happening until I realized that I was double clicking the add event + button. Using Windows 10 on a desktop PC. 3 0 Oct. 02, 2024
  • Sample code fails test for L3.P2CarobertI had what I thought was a correct answer for L3.P2 but it kept failing the tests, so I copied the sample code, and it is asserting that the unit tests are failing. Any thoughts on what is happening? 4 0 Sep. 24, 2024
  • Why "direction.x/y" are not var?united-armadilloHi, I noticed that we first declare the variable "direction", then under that we have direction.x and direction.y that are equals to the input... Here's the code var direction := Vector2(0, 0) direction.x = Input.get_axis("move_left", "move_right") direction.y = Input.get_axis("move_up", "move_down"). it's confusing to me that the direction.x and .y are not declared as variables. I guess this has to do with the "." Followed by the x and y which I suppose are the arguments of Vector2? Can you explain this concept further? 2 0 Sep. 22, 2024
  • Does the order of the arguments in "get_axis()" matter?onemoreturn_I wrote the arguments of get_axis in reverse order ("move_right", "move_left") and it gave me an error in the practice. Is it because it's comparing against the result of the activity or does the order really matter in reality? ```gdscript func _process(delta: float) -> void: direction.x = Input.get_axis("move_right", "move_left") direction.y = Input.get_axis("move_up", "move_down") ``` 1 0 Sep. 20, 2024
  • Sprite facing in the wrong direction after diagonal movementbrief-whaleI have the same problem that after a diagonal move the sprite looks right left up or down and not diagonally. When I move it, it points in the right direction, but when I stop it only points in one of the 4 directions mentioned above. one of the people here in the comments was confused and me too. it would be cool if you could add a small fix. Thanks :) 1 0 Sep. 04, 2024
  • The L3.P2 practice crashesrowdy-rhinocerosI ran the L3.P2 practice with my code and it crashed, Invalid get index "direction" (on base "Sprite2D(character_diagonals.gd)"). turned out, after a long time speculation over what was wrong, that I had the if direction.length() > 1 and not 1.0 FYI 2 0 Aug. 23, 2024
  • Does is matter where we normalisekaku9879i did the code and also a side project both normalising the direction at the very end and it works fine but in the practice if you do this is counts it as wrong and only works if i put it after the inputs but then i went back to my side project and the main ship script and tried to put it before the inputs it then didn't normalise? just wanted to understand 2 0 Aug. 19, 2024
  • My max_speed is 10 times slowerblushing-squidI have to make my max_speed := 6000.0 to make it move like the example in the tutorial. I'm using a relatively powerful PC so I don't think it's the PC's problem. I also tried out Animation the other day (unrelated to this tutorial), it looked normal inside the editor but once I run the scene the animation becomes significantly slower. Does anyone know what could be the reason ? 3 0 Aug. 17, 2024
  • Player's movement direction: Input.get_action_strengthboaroHey guys! Congratulations on the amazing course methodology, it's really great. I have a question about **Input.get_action_strength()**, I saw that you have used it in the the **CharacterBody2D** movement on the **Get to Know Godot** project. But you didn't motioned it in the **M4.L3**. Do you mind to explain the diference (or pros and cons) of using it over **Input.get_vector()** and **Input.get_axis()**. Thank you! 1 0 Aug. 16, 2024
  • Question about direction being defined within process functionsuperior-aardvarkI was having issues getting my code to run with the direction variable being defined in the process function, so I moved it outside the process function and that fixed my issue. My question is: is there any way writing it like this would work? Correct me if I'm wrong, but wouldn't defining a variable with a value of 0 inside the process function create and set that variable equal to 0 every frame, making it useless if it constantly needs to change? 8 0 Aug. 14, 2024
  • Is it safe to compare ints and floats?raincloudIn lines 14 and 20 of the reference code, is it important that `direction.length()` is compared with the floats `1.0` and `0.0` instead of ints? I had instead written `if direction.length() > 0:` for line 20, for example, and it worked as expected. Is that a habit that could cause problems for me down the road? In the code docs, I see that `length()` always returns a float, so is it best practice to keep types consistent when using comparison operators? 2 0 Aug. 12, 2024
  • Flip the spriteMaziHi! Just a question. If I saw correct when we press the left or right, up or down the ship sprite is just flipping (veritcally, horizontally) but to the opposite side. It is not a problem if I use this sprite because the upper and the down side are the same so I can never recognize it but I tried the code with Godot logo. :) Could you please tell me a solution for this? I tried a few things what i found on the internet but i am a beginner and I don't want to learn bad things and of course I had no success. :) Thanky you! 4 0 Aug. 11, 2024
  • I forgot something on one of my questions.dofudengamesFor my suggestion, i meant like the onion peel of the ship 3 0 Aug. 04, 2024
  • Getting Errors after a Blue Screenpossible-humanHi there! Was enjoying my time running through the practices until i experienced a blue screen of death while running "Speeding in Diagonals". After getting back in, I'm getting the following errors: scene/resources/resource_format_text.cpp:1047 - user://progress_v2.tres:1 - Parse Error: Failed loading resource: user://progress_v2.tres. Make sure resources have been imported by opening the project in the editor at least once. Error loading resource: 'user://progress_v2.tres'. res://addons/gdpractice/ui/ui_selectable_practice.gd:92 - Invalid get index 'state' (on base: 'null instance'). res://addons/gdpractice/ui/ui_selectable_practice.gd:92 - Invalid get index 'state' (on base: 'null instance'). res://addons/gdpractice/ui/ui_selectable_practice.gd:92 - Invalid get index 'state' (on base: 'null instance'). res://addons/gdpractice/ui/ui_selectable_practice.gd:92 - Invalid get index 'state' (on base: 'null instance'). res://addons/gdpractice/ui/ui_selectable_practice.gd:92 - Invalid get index 'state' (on base: 'null instance'). Now the practices don't work :( pls help! I tried downloading fresh, extracting to different locations, but no improvement. 2 0 Aug. 01, 2024
  • Dark modemiserly-dugongI don't know if you plan on having a dark mode one day but it would be lovely, having to switch between Godot's default dark theme and the stark white website is a bit of a pain. Thank you so much for everything, the rest of the user experience is amazing. 4 0 Jul. 24, 2024
  • Trouble with the GD praticeskarlscodingWhen I press run it opens the game but it doesn't work and it goes to a script called test. 1 0 Jul. 23, 2024
  • L3. - Value types in the code questionMatejHello, is there a reason why some of the values are float type? ```gdscript var max_speed := 600.0 # Could I type 600 instead without causing # any Issues for this specific project? # Same question here, would using an integer be ok for this project? if direction.length() > 1: # <-- Good? Bad? Depends? direction = direction.normalized() # Instead of (as per the project guide): if direction.length() > 1.0: direction = direction.normalized() ``` Expanding on the .length() - Is the reason we type '#... direction.length() > 1.0' instead of '#... direction.length() > 1' just because the .length() function returns a float value (as in good practice/convention)? Or could using an integer cause some issues later on? 2 0 Jul. 21, 2024
  • Velocity Vector Issue in L3.P2complex-antI had no issues with the previous practice but I seem to be missing something in Practice 2. It says there is a case where the length of the velocity vector was greater than the max speed and asks if I normalized the direction vector which I though I did. ```gdscript extends Sprite2D var max_speed := 600.0 var velocity := Vector2(0, 0) # Once again, the direction variable is outside the _process() function so the # practice testing code can read its value. var direction := Vector2(0, 0) func _process(delta: float) -> void: direction.x = Input.get_axis("move_left", "move_right") direction.y = Input.get_axis("move_up", "move_down") # The character is way too fast, but only when moving diagonally! # Add code to prevent that. velocity = direction * max_speed position += velocity * delta if velocity.length() > 0.0: rotation = velocity.angle() if direction.length() > 1.0: direction = direction.normalized() ``` I'm not sure what to do to fix this. 8 0 Jul. 17, 2024
  • Game Freezes/ not smoothfixed-bearI was wondering if the tests are meant to be smooth as it seems like my Godot engine freezes every 1-2 seconds. Im not sure how I can share a video of the screen but the "gameplay" is not smooth even if the code is identical to the one provided in this course. It does not seem to be an issue with the inputs as well as just setting the position += velocity * delta (ie code from last lesson) still gets stuck/freezes every 1-2 seconds 6 0 Jun. 25, 2024
  • Input mapping flips if not in specific orderPixelbladeI noticed that the directional input along the x and y axis depends on the order that the input mapping appears in the code. What am I missing? The order in which input mapping names are referenced in code should not matter! **Movement input is flipped** If I push the key to move to the right, the ship moves left. If push the key to move up, the ship moves down. etc. ```gdscript func _process(delta: float) -> void: var direction: Vector2 = Vector2(0,0) direction.x = Input.get_axis("move_right", "move_left") direction.y = Input.get_axis("move_down", "move_up") ``` **Movement input works as expected** The input keys move the ship as expected. Key to move right, makes the ship move right, etc. ```gdscript func _process(delta: float) -> void: var direction: Vector2 = Vector2(0,0) direction.x = Input.get_axis("move_left", "move_right") direction.y = Input.get_axis("move_up", "move_down") ``` 2 0 Jun. 14, 2024
  • About the final code in this lessonHazlarHello, ```gdscript extends Sprite2D var velocity := Vector2(0, 0) var max_speed: float = 300.0 var direction: Vector2 = Vector2(0, 0) func _process(delta: float) -> void: direction.x = Input.get_axis("move_left", "move_right") direction.y = Input.get_axis("move_up", "move_down") if direction.length() > 1.0: direction = direction.normalized() velocity = direction * max_speed position += velocity * delta if direction.length() > 0.0: rotation = velocity.angle() ``` In this course, we deconstructed the variable velocity to make it hollow and re-fill it with its twin (`var direction`) (because it is also a vector) then its displacement coefficient (`var max_speed`). I therefore notice that modifying the direction structure is implicitly modifying that of velocity (or the sprite?). Because in the examples of the ship, once we normalize the direction structure then another time the final `velocity` variable. But from what I understand the two variables for me are 'twins'. So what motivates choosing one more than the other? Should we intellectualize this because it presents notable differences later, or act and think afterwards? Thank you in advance 1 0 Jun. 12, 2024
  • Several questions about pixel and diagonal displacementHazlarHello, if 1 pixel is 1 cm on each side, and my movement step is 1 cm. if I go diagonally I would not reach the end with this single step, I will still need about 0.4 cm so what does the computer do if the movement is not standardized? the player moves forward again with a new step of 1 cm to finish his race regardless, thus passing the opposite corner? If yes the player will have traveled 2 cm diagonally instead of 1.4 so will have bitten 0.6 cm more so covered 60% of additional ground but you say 40% and that is where I would like to have details. I guess the player doesn't actually walk inside the square that represents the pixel, he follows sub-grids of coordinates while crab walking? once **__** and once **|** ? Thanks in advance 3 0 Jun. 09, 2024
  • Why do we need parenthesis after for exemple direction.length()ChanclinkI did not clicked before but I struggled with a stupid error because I did not put the parenthesis after direction.length() because I don't understand why we need them ? For me parenthesis are for us to enter parameters for functions, am I wrong ? or is it that the variable direction here, since it's a Vector2 type, is considered an "object" and then we need parenthesis because .length is actually a function ? 3 0 Jun. 03, 2024
  • Jittering in fullscreen modeadventurous-wildcatHello, on my Dell 60Hz, 3440x1440, I got jittering, when trying the game in fullscreen mode. It's fine when I play in windowed mode. What I found was, when I disabled the V-Snyc Mode in the Project Settings, the jittering would stop. Why is that? More importantly, disabling V-Sync shouldn't a favorable solution. Won't fast paced games need V-Sync? Also the players may want an option to turn it on on their side... it seems like jittering and stuttering is a common problem in Godot, from what I have read. By the way, this was not a problem with the sample game in the Tours. Basically I am worried about the performance. 1 0 Jun. 01, 2024
  • Can we leave out velocity? Why not?kindly-gerbil```gdscript extends Sprite2D var max_speed := 300 func _process(delta: float) -> void: var direction := Vector2(0, 0) direction.x = Input.get_axis("move_left", "move_right") direction.y = Input.get_axis("move_up", "move_down") if direction.length() > 1: direction = direction.normalized() position += direction * max_speed * delta if direction.length() > 0.0: rotation = direction.angle() ``` 1 0 May. 30, 2024
  • Question about func _input()Lucas PscheidtWhy is it better to set the direction inside _process function instead of using dedicated _input function to receive the information when the movement inputs get pressed? I don't understand when to use this function instead of checking for input in _process. 1 0 May. 23, 2024
  • Does the 'var direction' line have to be in the function?nasty-beeCan't we just put line 8 "var_direction := Vector 2(0, 0)" outside of the function with the other variables? In the challenge that's where it is and it doesn't seem to make a difference. Thanks! 1 0 May. 16, 2024
  • GD Quest issuecomplex-hornetIf I'm following along with the character_input.tscn instructions and try and run the scene, it instead runs the GD quest window and crashes the editor. The only fix I have found is to disable the GD quest plugin until I'm ready for the challenges. 1 0 May. 09, 2024
  • Error: Input Map Action does not existample-troutCan someone help me trouble shoot? I am getting an error that reads "Invaled get Index 'direction' (on base: 'Sprite2D (character_input.gd') When I press play through godot I can use the keyboard to move my character, but when I press run through the tutorial it shuts down my trial and gives me this error. 3 0 May. 08, 2024
  • Invalid path in L3.P2big nemoIt looks like the path to the practice solutions changed but at least one of the files didn't get updated accordingly. Prior to changing this file reference the L3.P2 practice just freezes up and throws a file not found error in the debugger. L3.P2/character_diagonals.tscn contains the line: `[ext_resource type="Script" path="res://practice_solutions/L3.P2.character_diagonals/character_diagonals.gd" id="2_mon8h"]` It should be: `[ext_resource type="Script" path="res://addons/gdquest_practice_framework/practice_solutions/L3.P2.character_diagonals/character_diagonals.gd" id="2_mon8h"]` 4 0 Apr. 30, 2024
  • Bug: When trying to run test, const Utils is already in scopeOwl KnightHad to change the line to be a comment for the tests to run. Not sure why no one else seems to be having the same issue. #const Utils := preload("res://addons/gdquest_practice_framework/utils.gd") Specific to L3.p1 + p2 so far 4 0 Apr. 29, 2024
  • My character is not moving! issuealanlovesgameswhen playing the test scene, it says the godot project is missing the input actions but i put them in and am moving the bullet around, am i missing something? 4 0 Apr. 28, 2024
  • Bug if you move direction var inside _process func in character_inputandrea-putortiAfter I completed the practice "My character is not moving!", I tried moving this line inside the function _process, just to test more: ```gdscript var direction := Vector2(0, 0) ``` When I pressed F6 to run the scene, it gave me an error of course, but also showed me a whole different sheet of code, which I believe is the backend test code (I can send screenshots if needed). Even if you press CTRL+Z it won't cancel the action done, the only way to fix it is to switch the scene to another and get back to find the code as you edited it, then you can CTRL+Z. 1 0 Apr. 16, 2024
  • Understanding "rotation = velocity.angle()"leafWhat exactly is happening when we use **.angle()** on our **velocity** variable? I understand that with the line of code we are setting the **rotation** property of the ship to be in the direction of our **velocity** variable. I guess where I am confused is, what exactly is **.angle()** doing here? Isn't the value of **velocity** already being returned as a negative or positive vector value based on our **direction** and **max_speed** variables? 1 0 Apr. 15, 2024
  • L3.P1 Practice FailingleafThe character_input.gd script for the practice test L3.P1 I have entered is coming back as failed, when I run the test, the players are moving in the same direction, and in sync, but there is a slight difference in position of the opaque player and the other. What am I missing here? This is what I am using: ```gdscript extends Sprite2D var max_speed := 600.0 var velocity := Vector2(0, 0) # For this practice, we moved the direction vector outside the _process() function. # This allows the interactive practice to read its value and test if your code passes! # You can access and change the direction variable inside the _process() function as you did in the lesson. var direction := Vector2(0, 0) func _process(delta: float) -> void: # The direction is always equal to Vector2(0, 0)! Add code to remedy that. velocity = direction * max_speed position += velocity * delta if direction.length() > 1.0: direction.normalized() direction.x = Input.get_axis("move_left", "move_right") direction.y = Input.get_axis("move_up", "move_down") if velocity.length() > 0.0: rotation = velocity.angle() ``` 3 0 Apr. 11, 2024
  • Diff, New, and Old - Heads up! (also, typos)leafHey all and good day to you; I hope you are making it through and are learning well! I have been reading through this step by step, very carefully and slowly, and I noticed there may be a lack of instruction. Correct me if I am wrong (and please do), I have not have seen anything stating what *"**Diff**, **New**, and **Old**"* do in the examples. I think I understand them now - **Diff**: Shows both code examples side by side showing the difference. **New**: Shows the line of code as it should be after the changes. **Old**: Showing the old line of code that was replaced. - It caused minor confusion for me, and I am lucky I caught on to what was happening after having a minor bit of trouble with a typo of the word "length" (be careful with misspelling words like this, easy to miss; luckily, misspelling it lead me to understand what these example features likely do.) 1 0 Apr. 11, 2024
  • Small typo?A_Room_With_A_MooseUnless I'm reading this incorrectly, there seems to be a typo in the "Detecting player input" section. [https://school.gdquest.com/courses/learn_2d_gamedev_godot_4/to_space_and_beyond/taking_control#detecting-player-input](https://school.gdquest.com/courses/learn_2d_gamedev_godot_4/to_space_and_beyond/taking_control#detecting-player-input) Paragraph 1, sentence 2: "It will represent the direction in which the player we want the ship to move." I presume it's meant to read "It will represent the direction in which we want the ship to move," or "It will represent the direction in which the player wants the ship to move," correct? 1 0 Apr. 07, 2024
  • How does vector normalization work?woeful-llamaI think I'm digging a bit too deep here, but just can't wrap my head around the way the division of the **Vector2(1.0, -1.0)** by its length provides us with the "correct" direction vector whose length is lowered to **1.0**. Using a formula from SG1 in this module, I've tried doing the division manually like so: *Vector 2 (1.0 ÷ length, -1.0 ÷ length)* where *length=1.41421356237*. But I'm left with a result of Vector2(0.70710678118, -0.70710678118). Its length is almost 1, but not exactly. So, am I correct in thinking that inputting this: `if direction.length() > 1.0:` `direction = direction.normalized()` Doesn't actually change the fact that the ship has a different velocity when it moves diagonally. It's just that the difference between the straight and diagonal velocity becomes visually unnoticeable, right? 2 0 Apr. 03, 2024
  • L3.P2 CompletionCheck Error?NickGodot 4.2.1 When normalizing vector direction in velocity definition string velocity = direction.normalized() * max_speed "Direction length is never longer than 1" check remains unmet, hinting on normalizing direction. I know code enough to override direction string to be: direction = Vector2(Input.get_axis("move_left", "move_right"),Input.get_axis("move_up", "move_down")).normalized() Then it works. But isn't it identical? Or is there an error in the conditions? 1 0 Apr. 02, 2024
  • Suggestion on implementation of _processzshazzOne improvement I'd suggest is using `get_vector` over the `get_axis` + `normalized` approach. It behaves much more predictably for me using a joystick (in particular, the dead zone is a circle rather than a square), and it automatically normalizes the direction for you, saving you from having to do that step. That's also the [recommended approach](https://docs.godotengine.org/en/stable/tutorials/inputs/controllers_gamepads_joysticks.html#which-input-singleton-method-should-i-use) by Godot for handling analog-aware movement. 6 0 Apr. 01, 2024
  • Typo in "Detecting player input"Adimo37Hello, I think there is a typo in the second paragraph: Define a new variable named direction at the top of the _process() function. It will represent the direction in which the player we want the ship to move. It should be "It will represent the direction in which we want the ship to move." 1 0 Mar. 29, 2024
  • Setting direction inside of _process in Practice?machinemanFor some reason, in the first practice, my code doesn't work if I add the ```gdscript var direction: Vector2 = Vector2(0, 0) ``` to the `_process` function. If I leave it out, the test is passed. In some sense I think I understand why it works when it's not in there... but that makes me question why the "correct" solution has it in there? 5 0 Mar. 24, 2024
  • Slow speed moving diagonally with control stickSamukaveraI was getting slow speed when moving diagonally using the control stick in my controller. To solve this I used Input.get_vector instead of Input.get_axis 1 0 Mar. 23, 2024
  • Section needs clarity444bIn the section "Calculating the movement Direction": There is a statement that we can decompose the velocity into two values: Direction and speed `We can decompose the velocity into two values:` 1. `The direction is a Vector2 value with a maximum length of one.` 2. `The speed is a decimal number representing the velocity vector's desired length.` Issue: Is it not clear why this is the case or why we can decompose it into two values. This section needs a bit of structure and elaboration in order to be clear. Please elaborate. 3 0 Mar. 17, 2024
  • Why is it necessary to initialize the direction variable every frame?Slate Jamesis there a reason to keep line 8 `var direction := Vector2(0, 0)` in the function? Why can't it be initialized in line 5, outside of the function? 2 0 Mar. 14, 2024
  • Had to swap move_up and move_down in L3.P1splendid-albatrossIn L3.P1 I was getting a fail due to the up and down movement not working. I switched the up and down callouts in the Input.get_axis() and I got success. The input keys are correct, so I'm not sure why the order should matter. 2 0 Mar. 14, 2024
  • "Editor Settings -> Shortcuts" weird behaviour?Hermundure I toyed around with different methods to move the ship and recognized something I do not understand. If I use our created inputs in the input map, like shown in the code below, the printed velocity values are as expected: ```gdscript func _process(delta: float) -> void: velocity = Input.get_vector("move_left", "move_right", "move_up", "move_down") position += velocity * speed * delta print(velocity) ``` Printed values: -1,0 1,0 0,-1 0,1 But if I exchange the input arguments with the ones that come with Godot (editor settings -> shortcuts) I get weird results: ```gdscript func _process(delta: float) -> void: velocity = Input.get_vector("ui_left", "ui_right", "ui_up", "ui_down") position += velocity * speed * delta print(velocity) ``` Printed values: -0.997638, 0.068685 0.718478, 0.057677 -0.133595, -0.873792 -0.140943, 0.990018 The ship also does not move in a straight line anymore (thats how I discovered this weird behaviour). I already downloaded the 4.3 dev version of GD but it behaves the same, even in the other version. Why is that? 4 0 Mar. 11, 2024
  • How 40% longer?datiswous> But if we simultaneously press right and up, the calls to `Input.get_axis()` give us a value of `1.0` for x axis and `-1.0` for the y axis of our `direction` vector. In that case, the direction vector is about 40% longer. Why is it 40% longer? I don't understand where the number 40 comes from. 6 0 Mar. 11, 2024
  • Please make title stickygnomerunnerHi Suggestion for UX improvement. When a question is clicked, the sidebar has 2 titles and it feels like the top one was expected to be sticky but it is not. Redundant title can also be removed. 1 0 Mar. 10, 2024
  • Typo "Congradulation"NOAVGCNoticed that when successfully running practice code, you receive the message "Congradulation". It should be Congratulation 1 0 Mar. 06, 2024
  • Error when trying to start L3.P1CerealWhen I try to start L3.P1, it says: "Invalid get index 'direction' (on base: 'Sprite2D (character_input.gd)')." and opens up a script for test.gd in character_input.gd. It then points me to line 49 of test.gd which reads: data.practice_direction = _practice.direction However, it does actually open up the test menu but immediately freezes indefinitely. 5 0 Mar. 06, 2024
  • Add example for `Turning the ship only when moving`shouplesThe purpose of this section wasn't very clear -- it may be helpful to add a before/after example, like "notice if you move the ship around, its rotation resets back to facing toward the right even if the ship stopped while facing up/down/left" before adding the `if direction.length() > 0.0` condition. 3 0 Mar. 02, 2024
  • Stutter with this movement codebc likes youSetup: Godot's run window plays on my 2nd monitor (Dell U2415, 1200 x 1920, 60hz, oriented vertically). Issue: I get movement stutter every second or so. It's less so on my main monitor. I have another top-down project that uses the following code and I get no stutter. `if Input.is_action_pressed("right"):` ` velocity.x += 1` Totally possible it's my machine but I thought I'd give you a heads up. 3 0 Feb. 27, 2024
  • Format the codezemyIs there any shortcut that format the code like in others IDEs? 1 0 Feb. 24, 2024
  • Opinion on Input.get_axis() vs Input.get_vector()PattyI noticed that Input.get_vector() works similarly to get_axis(), but it also normalizes the vector and keeps getting the direction in one method. Is one better in this case or is it just preference? Also, really liking the course so far! 2 0 Feb. 20, 2024
  • diagonal speed if statement doesn't work on L3.P1 lucky-locustit works on L3.P2, so no worries, but I did it in p1 without knowing I had it in the next text but when pressing play the bullet still goest faster when facing diagonally. Thanks! 1 0 Feb. 19, 2024
  • Why check for length prior to normalizationlovely-foxInstead of normalizing the direction vector when it's length is greater than 1.0 why not normalize the vector all the time. This shortens our code and removes the computation of the "if" statement. 2 0 Feb. 11, 2024
  • L3.P1 and L3.P2 pass without any changeAdrOn Linux/Godot 4.2.1 stable (as provided), the plugin shows the L3.P1 *My character is not moving* and L3.P2 *Speeding in diagonals* as passed without having the user to have to do anything. 2 0 Feb. 10, 2024
  • velocity > 0 in L3.P2Trifidein the lesson, we set up the rotation lock when not moving by checking the direction variable, but in the practice the line check the velocity instead, is it another way to lock the rotation or is it a typo? 4 0 Feb. 09, 2024
  • Typo in the paragraph "Why does the ship move faster when going diagonally?AlcedoHi, I think there is a typo in the text above the second screen of the paragraph. If we simultaneously press right and up, `Input.get_axis()` should return 1.0 for the x and -1.0 for the y. 1 0 Feb. 05, 2024
  • Typo in the folder and file names for practice L3.P2iDieThere is a typo in the folder and file names for practice L3.P2. It should be diagonals instead of diagionals. I am using the "version" learn-2d-gamedev-projects-0.1.0-windows.zip 1 0 Feb. 04, 2024
  • question on Complete code line 20Adamsapwhy is line 20 of the complete code on browser using direction instead of velocity? Are we not supposed to be doing this if the player is moving only? I used velocity as we are only supposed to rotate if we are moving. 4 0 Feb. 03, 2024
Site is in BETA!found a bug?