diff --git a/_share/media/img/albert/section-05/lesson-06/ex_01a.png b/_share/media/img/albert/section-05/lesson-06/ex_01a.png new file mode 100644 index 0000000..1205280 Binary files /dev/null and b/_share/media/img/albert/section-05/lesson-06/ex_01a.png differ diff --git a/_subsections/sec05/lesson-06.org b/_subsections/sec05/lesson-06.org index 5c4252f..76ae29c 100755 --- a/_subsections/sec05/lesson-06.org +++ b/_subsections/sec05/lesson-06.org @@ -1,5 +1,5 @@ -#+title:Flyin#+title: Section 05 - Lesson 06 | Plane Movement -#+HTML_HEAD: +#+title: Section 05 - Lesson 06 | Plane Movement +#+HTML_HEAD: #+OPTIONS: H:6 * Links @@ -9,3 +9,104 @@ * Notes - the more complex the collision shape the more computations - if you concentrate on good games, you'll notice the collisions are actually straightforward + +** collision shape +*** adding a collision shape +- click on root node +- add child CollisionShape2D + - pane scene->collision_shape_2D + - pane inspector->CollisionShape2D->Shape + - select new CircleShape2D + - use shape handles to adjust + +*** issues with collisions +- we want the collision shape to be good +- but the more complex the collision the more computations +- focus on the game flow, not perfecting the modeling + + +*** circle shape resource +- click inside the Shape dropdown on the CircleShape2D item +- it will open up and show you details about CircleShape2D + - radius + - resource + - local to scene + - path + - name + +- currently the resource is embedded in the scene + +**** if you want to save the resource for reuse +- click on the arrow next to the Shape dropdown +- click save or save as + +** add a script +- SELECT THE ROOT NODE "plane" +- click on the Scene green plus to add a script + #+attr_html: :width 600 + file:../../_share/media/img/albert/section-05/lesson-06/ex_01a.png + +*** in dialog +- template: select Node default +- built in script: off + +*** coding +- in a phsycis body we just give vectors + - let the physics engine deal with positioning + +- CharacterBody2D has a velocity variable which you can set + - Vector2D velocity + - x, y + - how much we want to move in x and y + + - function bool move_and_slide() + - updates our position + - updates the velocity if we collide with something + + - after move_and_slide has been invoked we call other funcitons + - is_on_ceiling + - is_on_floor + - etc + +- upDirection method sets what is "up" + - default x: 0, y: -1 + - (0, 1) ceiling is now floor + - (1, 0) the left side is the ceiling + +*** default gravity +- you can access gravity from Project Settings + +#+begin_src gdscript +var _gravity: float = ProjectSettings.get("physics/2d/default_gravity") +#+end_src + +*** manipulating physics nodes +- use _physics_process instead of _process + +- process is invoked every frame +- physics process is invoked at about half that rate + +** creating boundaries +*** create barrier scene +**** initialize the scene +- create a new scene +- don't select one of the default nodes as the root +- use the + symbol in Scene to select a StaticBody2D as the root node + +**** add boundaries +- create 2 CollisionShape2D nodes +- on each set shape to WorldBoundaryShape2D + +- lower node + - move the boundary to the bottom of the viewing area + +- top node + - move the boundary a little bit above so as to give the plane some room to bounce through the ceiling + - click on the Shape dropdown of WorldShape2D to open additional values + - set the direction to down + - in Normal, change y from -1 to 1, so it points down instead of up + +- save scene + +*** add barrier to game scene +- instantiate as a child node in the game scene