updated near end of 12
This commit is contained in:
parent
cb1348851a
commit
1e7bba86a0
1 changed files with 137 additions and 1 deletions
|
|
@ -32,13 +32,15 @@
|
||||||
- Inspector->AnimatedSprite2D->Animation->Frame
|
- Inspector->AnimatedSprite2D->Animation->Frame
|
||||||
- scroll through the frames to see if they fit the collision shape properly
|
- scroll through the frames to see if they fit the collision shape properly
|
||||||
|
|
||||||
** modify the player script to handle the collision
|
** */method 1/*: using character bodies and collision shapes
|
||||||
|
|
||||||
*** default collision code
|
*** default collision code
|
||||||
- default collision handling occurs between two CharacterBody2D nodes
|
- default collision handling occurs between two CharacterBody2D nodes
|
||||||
- limits each others movements
|
- limits each others movements
|
||||||
- occurs after the =move_and_slide= function is called
|
- occurs after the =move_and_slide= function is called
|
||||||
|
|
||||||
|
*NOTE: you are not expected to put this into the script!!!*
|
||||||
|
|
||||||
#+begin_src godot
|
#+begin_src godot
|
||||||
# Using move_and_collide.
|
# Using move_and_collide.
|
||||||
var collision = move_and_collide(velocity * delta)
|
var collision = move_and_collide(velocity * delta)
|
||||||
|
|
@ -75,6 +77,140 @@ func _physics_process(delta):
|
||||||
updateAnimation()
|
updateAnimation()
|
||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
|
*** problems
|
||||||
|
- the player sprite might only have the shape on the lower part of his body and not the upper
|
||||||
|
- this is to allow him to move the body against a tree or other object and only block by the feet
|
||||||
|
- this causes the enemy sprite to walk directly through the player
|
||||||
|
|
||||||
|
** layer and mask
|
||||||
|
|
||||||
|
*** change collision layer and mask for players
|
||||||
|
- [Player Root Node]->Inspector->CharacterBody2D->Layers
|
||||||
|
- How Layers work
|
||||||
|
- the numbers of the layers selected determines what he looks for
|
||||||
|
- you can change the name of the layer by clicking on the three dots to the right
|
||||||
|
- change the layers names
|
||||||
|
- Layer 1: 'player'
|
||||||
|
- Layer 2: 'enemy'
|
||||||
|
|
||||||
|
*** change the collision layer and mask for enemies
|
||||||
|
- [Enemy Sprite] -> [Enemy Root Node] -> Inspector -> CollisionObject2D -> Collision -> Layers
|
||||||
|
- move the sprites layer and mask to '2'
|
||||||
|
|
||||||
|
*** enabling enemy sprites to collide with tilemap
|
||||||
|
- make all enemy sprites children of the tilemap
|
||||||
|
- [Tilemap Node] -> Inspector -> TileMapLayer -> TILESET
|
||||||
|
- INSIDE the "tileset" dropdown, click on whatever element was selected
|
||||||
|
- this will open up the physics layer
|
||||||
|
- set the layers and masks to /*BOTH*/ "1" and "2"
|
||||||
|
|
||||||
|
** method2: hurt box and hit box
|
||||||
|
*** basic
|
||||||
|
- add hurt box to player
|
||||||
|
- add hit box to enemy
|
||||||
|
|
||||||
|
*** create hurt box
|
||||||
|
- add Area2D node to [Player Scene]
|
||||||
|
- you can rename it 'hurtBox'
|
||||||
|
- add a CollisionShape2D to the Area2D node
|
||||||
|
- [hurtBox node] -> CollisionsShape2D -> Inspector -> CollisionShape2D -> Shape
|
||||||
|
- select what shape you want from the dropdown box
|
||||||
|
- set the collision properties for the hurt box
|
||||||
|
- [hurtBox node] -> CollisionObject2D -> Collision
|
||||||
|
- set /*ONLY*/ the mask to "1" and "2"
|
||||||
|
|
||||||
|
*** create hit box
|
||||||
|
- go to NPC sprite
|
||||||
|
- add Area2D node
|
||||||
|
- rename 'hitBox'
|
||||||
|
- add CollisionShape2D to Area2D node
|
||||||
|
- rotate it 90
|
||||||
|
|
||||||
|
* in the case where animation frames change shape
|
||||||
|
|
||||||
|
** modify sprite scene
|
||||||
|
- add AnimationPlayer node to scene
|
||||||
|
- remove AnimatedSprite2D
|
||||||
|
- add regular Sprite2D node
|
||||||
|
- set texture on sprite
|
||||||
|
- drag sprite texture to Sprite2D->Inspector->Sprite2D->Texture
|
||||||
|
- set Hframes and Vframes correctly
|
||||||
|
- Sprite2D->Inspector->Sprite2D->Animation
|
||||||
|
|
||||||
|
- move sprite up over center of scene
|
||||||
|
|
||||||
|
** MOVE THE AREA2D FOR PROPER DRAWING
|
||||||
|
- area2D node must be lower than the Sprite2D node
|
||||||
|
- this will draw it on top of the sprite
|
||||||
|
- make it easier to animate properly
|
||||||
|
|
||||||
|
** modify AnimationPlayer node
|
||||||
|
- select node
|
||||||
|
- in lower pane, find "Animation" dropdown
|
||||||
|
- select "New"
|
||||||
|
- call it "walkDown"
|
||||||
|
#+attr_html: :width 400px
|
||||||
|
[[../../_share/media/img/ch12/g12_animation.png]]
|
||||||
|
|
||||||
|
- set snap to 0.2
|
||||||
|
#+attr_html: :width 400px
|
||||||
|
[[../../_share/media/img/ch12/animation_snap.png]]
|
||||||
|
|
||||||
|
** add sprite animations
|
||||||
|
- [Sprite2D node] -> Inspector -> Sprite2D -> Animation
|
||||||
|
- select the X and Y of Frame Coords
|
||||||
|
- click the key button
|
||||||
|
#+attr_html: :width 250px
|
||||||
|
[[../../_share/media/img/ch12/frame_coords.png]]
|
||||||
|
|
||||||
|
- screen should look like
|
||||||
|
#+attr_html: :width 600px
|
||||||
|
[[../../_share/media/img/ch12/animation_timeline.png]]
|
||||||
|
|
||||||
|
- set animation length to 0.8
|
||||||
|
- enable looping
|
||||||
|
#+attr_html: :width 600px
|
||||||
|
[[../../_share/media/img/ch12/length_looping.png]]
|
||||||
|
|
||||||
|
** add collision detection to the frames
|
||||||
|
- select Area2D->CollisionShape2D node
|
||||||
|
- Inspector-> Node2D-> Transform
|
||||||
|
- make sure the bottom animation panel is visible
|
||||||
|
- select the first frame
|
||||||
|
- lock properties to the frames using key buttons
|
||||||
|
- position
|
||||||
|
- scale
|
||||||
|
|
||||||
|
#+attr_html: :width 250px
|
||||||
|
[[../../_share/media/img/ch12/lock_properties.png]]
|
||||||
|
|
||||||
|
#+attr_html: :width 600px
|
||||||
|
[[../../_share/media/img/ch12/lock_animation.png]]
|
||||||
|
|
||||||
|
*** go to the next FRAME in the animation panel
|
||||||
|
- adjust the shape of the collision area
|
||||||
|
- lock the properties as before
|
||||||
|
|
||||||
|
*** changing shape
|
||||||
|
- changing shape is IMPOSSIBLE
|
||||||
|
- we must change scale
|
||||||
|
- click the chains to allow you to change x and y axis independently
|
||||||
|
- click on the text box for each to change it
|
||||||
|
|
||||||
|
*** discreate changes
|
||||||
|
- the shape will appear to not change properly with the sprite
|
||||||
|
- this is because it's update mode is set to 'continuous'
|
||||||
|
- change it to discrete on both scaling and positioning
|
||||||
|
#+attr_html: :width 300px
|
||||||
|
[[../../_share/media/img/ch12/discrete.png]]
|
||||||
|
|
||||||
|
*** update the rest of the animations
|
||||||
|
- duplicate the current animation
|
||||||
|
- modify and set whatever properties are necessary for each animation
|
||||||
|
|
||||||
|
** modify script
|
||||||
|
- set the animations variable from $AnimatedSprite2D to $AnimationPlayer
|
||||||
|
|
||||||
* Video Contents
|
* Video Contents
|
||||||
|
|
||||||
[[https://www.youtube.com/watch?v=WVQkOWY3zxQ][Lesson Link]]
|
[[https://www.youtube.com/watch?v=WVQkOWY3zxQ][Lesson Link]]
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue