Add a Skeleton2D demo

This commit is contained in:
Aaron Franke
2021-06-23 12:56:33 -04:00
parent 244b759787
commit cd48c9a9cc
27 changed files with 3314 additions and 0 deletions

15
2d/skeleton/README.md Normal file
View File

@@ -0,0 +1,15 @@
# Skeleton2D Demo
This demo shows how to create a rigged and animated character in 2D using
Godot's Skeleton2D node. There are several movement-related animations and
there is a simple character controller that controls the animations.
Language: GDScript
Renderer: GLES 2
## Licenses
GBot character Copyright © circa 2020 Andreas Esau, MIT License.
Initial rigging and animating Copyright © 2020 RustyStriker, MIT License.

BIN
2d/skeleton/icon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

View File

@@ -0,0 +1,34 @@
[remap]
importer="texture"
type="StreamTexture"
path="res://.import/icon.png-487276ed1e3a0c39cad0279d744ee560.stex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://icon.png"
dest_files=[ "res://.import/icon.png-487276ed1e3a0c39cad0279d744ee560.stex" ]
[params]
compress/mode=0
compress/lossy_quality=0.7
compress/hdr_mode=0
compress/bptc_ldr=0
compress/normal_map=0
flags/repeat=0
flags/filter=true
flags/mipmaps=false
flags/anisotropic=false
flags/srgb=2
process/fix_alpha_border=true
process/premult_alpha=false
process/HDR_as_SRGB=false
process/invert_color=false
stream=false
size_limit=0
detect_3d=true
svg/scale=1.0

353
2d/skeleton/level.tscn Normal file

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,174 @@
[gd_scene load_steps=7 format=2]
[ext_resource path="res://level/background/distant_platforms_2.png" type="Texture" id=1]
[ext_resource path="res://level/background/sky.png" type="Texture" id=2]
[ext_resource path="res://level/background/cloud_1.png" type="Texture" id=3]
[ext_resource path="res://level/background/cloud_2.png" type="Texture" id=4]
[ext_resource path="res://level/background/cloud_3.png" type="Texture" id=5]
[ext_resource path="res://level/background/distant_platforms_1.png" type="Texture" id=6]
[node name="ParallaxBackground" type="ParallaxBackground"]
scroll_base_scale = Vector2( 0.4, 0 )
[node name="Sky" type="ParallaxLayer" parent="."]
motion_mirroring = Vector2( 400, 0 )
[node name="Sprite" type="Sprite" parent="Sky"]
scale = Vector2( 64, 0.94 )
texture = ExtResource( 2 )
centered = false
[node name="Clouds" type="ParallaxLayer" parent="."]
motion_scale = Vector2( 0.1, 1 )
motion_offset = Vector2( -550, 0 )
[node name="CloudGroup1" type="Node2D" parent="Clouds"]
position = Vector2( -780, 0 )
[node name="Sprite1" type="Sprite" parent="Clouds/CloudGroup1"]
position = Vector2( -200, 120 )
texture = ExtResource( 3 )
centered = false
[node name="Sprite2" type="Sprite" parent="Clouds/CloudGroup1"]
position = Vector2( 100, 10 )
texture = ExtResource( 3 )
centered = false
[node name="Sprite3" type="Sprite" parent="Clouds/CloudGroup1"]
position = Vector2( -60, 40 )
texture = ExtResource( 4 )
centered = false
[node name="Sprite4" type="Sprite" parent="Clouds/CloudGroup1"]
position = Vector2( 150, 65 )
texture = ExtResource( 4 )
centered = false
[node name="Sprite5" type="Sprite" parent="Clouds/CloudGroup1"]
position = Vector2( 15, 75 )
texture = ExtResource( 5 )
centered = false
[node name="Sprite6" type="Sprite" parent="Clouds/CloudGroup1"]
position = Vector2( 225, 35 )
texture = ExtResource( 5 )
centered = false
[node name="CloudGroup2" type="Node2D" parent="Clouds"]
[node name="Sprite1" type="Sprite" parent="Clouds/CloudGroup2"]
position = Vector2( -200, 120 )
texture = ExtResource( 3 )
centered = false
[node name="Sprite2" type="Sprite" parent="Clouds/CloudGroup2"]
position = Vector2( 100, 10 )
texture = ExtResource( 3 )
centered = false
[node name="Sprite3" type="Sprite" parent="Clouds/CloudGroup2"]
position = Vector2( -60, 40 )
texture = ExtResource( 4 )
centered = false
[node name="Sprite4" type="Sprite" parent="Clouds/CloudGroup2"]
position = Vector2( 150, 65 )
texture = ExtResource( 4 )
centered = false
[node name="Sprite5" type="Sprite" parent="Clouds/CloudGroup2"]
position = Vector2( 15, 75 )
texture = ExtResource( 5 )
centered = false
[node name="Sprite6" type="Sprite" parent="Clouds/CloudGroup2"]
position = Vector2( 225, 35 )
texture = ExtResource( 5 )
centered = false
[node name="CloudGroup3" type="Node2D" parent="Clouds"]
position = Vector2( 390, 0 )
[node name="Sprite1" type="Sprite" parent="Clouds/CloudGroup3"]
position = Vector2( -200, 120 )
texture = ExtResource( 3 )
centered = false
[node name="Sprite2" type="Sprite" parent="Clouds/CloudGroup3"]
position = Vector2( 100, 10 )
texture = ExtResource( 3 )
centered = false
[node name="Sprite3" type="Sprite" parent="Clouds/CloudGroup3"]
position = Vector2( -60, 40 )
texture = ExtResource( 4 )
centered = false
[node name="Sprite4" type="Sprite" parent="Clouds/CloudGroup3"]
position = Vector2( 150, 65 )
texture = ExtResource( 4 )
centered = false
[node name="Sprite5" type="Sprite" parent="Clouds/CloudGroup3"]
position = Vector2( 15, 75 )
texture = ExtResource( 5 )
centered = false
[node name="Sprite6" type="Sprite" parent="Clouds/CloudGroup3"]
position = Vector2( 225, 35 )
texture = ExtResource( 5 )
centered = false
[node name="CloudGroup4" type="Node2D" parent="Clouds"]
position = Vector2( 780, 0 )
[node name="Sprite1" type="Sprite" parent="Clouds/CloudGroup4"]
position = Vector2( -200, 120 )
texture = ExtResource( 3 )
centered = false
[node name="Sprite2" type="Sprite" parent="Clouds/CloudGroup4"]
position = Vector2( 100, 10 )
texture = ExtResource( 3 )
centered = false
[node name="Sprite3" type="Sprite" parent="Clouds/CloudGroup4"]
position = Vector2( -60, 40 )
texture = ExtResource( 4 )
centered = false
[node name="Sprite4" type="Sprite" parent="Clouds/CloudGroup4"]
position = Vector2( 150, 65 )
texture = ExtResource( 4 )
centered = false
[node name="Sprite5" type="Sprite" parent="Clouds/CloudGroup4"]
position = Vector2( 15, 75 )
texture = ExtResource( 5 )
centered = false
[node name="Sprite6" type="Sprite" parent="Clouds/CloudGroup4"]
position = Vector2( 225, 35 )
texture = ExtResource( 5 )
centered = false
[node name="Mountains2" type="ParallaxLayer" parent="."]
position = Vector2( 0, 243 )
motion_scale = Vector2( 0.2, 1 )
[node name="Sprite" type="Sprite" parent="Mountains2"]
position = Vector2( 0, -64 )
texture = ExtResource( 1 )
region_enabled = true
region_rect = Rect2( 0, 0, 2048, 128 )
[node name="Mountains1" type="ParallaxLayer" parent="."]
position = Vector2( 0, 246 )
motion_scale = Vector2( 0.4, 1 )
[node name="Sprite" type="Sprite" parent="Mountains1"]
position = Vector2( 0, -64 )
texture = ExtResource( 6 )
region_enabled = true
region_rect = Rect2( 0, 0, 2048, 128 )

Binary file not shown.

After

Width:  |  Height:  |  Size: 219 B

View File

@@ -0,0 +1,34 @@
[remap]
importer="texture"
type="StreamTexture"
path="res://.import/cloud_1.png-d9f3821e0d58b8b79ac7a8bc81287ae8.stex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://level/background/cloud_1.png"
dest_files=[ "res://.import/cloud_1.png-d9f3821e0d58b8b79ac7a8bc81287ae8.stex" ]
[params]
compress/mode=0
compress/lossy_quality=0.7
compress/hdr_mode=0
compress/bptc_ldr=0
compress/normal_map=0
flags/repeat=0
flags/filter=false
flags/mipmaps=false
flags/anisotropic=false
flags/srgb=2
process/fix_alpha_border=true
process/premult_alpha=false
process/HDR_as_SRGB=false
process/invert_color=false
stream=false
size_limit=0
detect_3d=false
svg/scale=1.0

Binary file not shown.

After

Width:  |  Height:  |  Size: 298 B

View File

@@ -0,0 +1,34 @@
[remap]
importer="texture"
type="StreamTexture"
path="res://.import/cloud_2.png-1b2bb3f73839db8c5ad1d01ad2876ab2.stex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://level/background/cloud_2.png"
dest_files=[ "res://.import/cloud_2.png-1b2bb3f73839db8c5ad1d01ad2876ab2.stex" ]
[params]
compress/mode=0
compress/lossy_quality=0.7
compress/hdr_mode=0
compress/bptc_ldr=0
compress/normal_map=0
flags/repeat=0
flags/filter=false
flags/mipmaps=false
flags/anisotropic=false
flags/srgb=2
process/fix_alpha_border=true
process/premult_alpha=false
process/HDR_as_SRGB=false
process/invert_color=false
stream=false
size_limit=0
detect_3d=false
svg/scale=1.0

Binary file not shown.

After

Width:  |  Height:  |  Size: 185 B

View File

@@ -0,0 +1,34 @@
[remap]
importer="texture"
type="StreamTexture"
path="res://.import/cloud_3.png-a4ce274fb6c38e3b05e8f88cf8cfffb6.stex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://level/background/cloud_3.png"
dest_files=[ "res://.import/cloud_3.png-a4ce274fb6c38e3b05e8f88cf8cfffb6.stex" ]
[params]
compress/mode=0
compress/lossy_quality=0.7
compress/hdr_mode=0
compress/bptc_ldr=0
compress/normal_map=0
flags/repeat=0
flags/filter=false
flags/mipmaps=false
flags/anisotropic=false
flags/srgb=2
process/fix_alpha_border=true
process/premult_alpha=false
process/HDR_as_SRGB=false
process/invert_color=false
stream=false
size_limit=0
detect_3d=false
svg/scale=1.0

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

View File

@@ -0,0 +1,34 @@
[remap]
importer="texture"
type="StreamTexture"
path="res://.import/distant_platforms_1.png-34bd3c6d35ad3a7b690f0c018ca8743f.stex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://level/background/distant_platforms_1.png"
dest_files=[ "res://.import/distant_platforms_1.png-34bd3c6d35ad3a7b690f0c018ca8743f.stex" ]
[params]
compress/mode=0
compress/lossy_quality=0.7
compress/hdr_mode=0
compress/bptc_ldr=0
compress/normal_map=0
flags/repeat=1
flags/filter=false
flags/mipmaps=false
flags/anisotropic=false
flags/srgb=2
process/fix_alpha_border=true
process/premult_alpha=false
process/HDR_as_SRGB=false
process/invert_color=false
stream=false
size_limit=0
detect_3d=false
svg/scale=1.0

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

View File

@@ -0,0 +1,34 @@
[remap]
importer="texture"
type="StreamTexture"
path="res://.import/distant_platforms_2.png-2ecd927ea77506f4ec1f3533e13d711a.stex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://level/background/distant_platforms_2.png"
dest_files=[ "res://.import/distant_platforms_2.png-2ecd927ea77506f4ec1f3533e13d711a.stex" ]
[params]
compress/mode=0
compress/lossy_quality=0.7
compress/hdr_mode=0
compress/bptc_ldr=0
compress/normal_map=0
flags/repeat=1
flags/filter=false
flags/mipmaps=false
flags/anisotropic=false
flags/srgb=2
process/fix_alpha_border=true
process/premult_alpha=false
process/HDR_as_SRGB=false
process/invert_color=false
stream=false
size_limit=0
detect_3d=false
svg/scale=1.0

Binary file not shown.

After

Width:  |  Height:  |  Size: 833 B

View File

@@ -0,0 +1,34 @@
[remap]
importer="texture"
type="StreamTexture"
path="res://.import/sky.png-c2b26f59be93d20195841091d4bd6a50.stex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://level/background/sky.png"
dest_files=[ "res://.import/sky.png-c2b26f59be93d20195841091d4bd6a50.stex" ]
[params]
compress/mode=0
compress/lossy_quality=0.7
compress/hdr_mode=0
compress/bptc_ldr=0
compress/normal_map=0
flags/repeat=1
flags/filter=false
flags/mipmaps=false
flags/anisotropic=false
flags/srgb=2
process/fix_alpha_border=true
process/premult_alpha=false
process/HDR_as_SRGB=false
process/invert_color=false
stream=false
size_limit=0
detect_3d=false
svg/scale=1.0

View File

@@ -0,0 +1,15 @@
extends Node2D
const LIMIT_LEFT = -315
const LIMIT_TOP = -250
const LIMIT_RIGHT = 955
const LIMIT_BOTTOM = 690
func _ready():
for child in get_children():
if child is Player:
var camera = child.get_node(@"Camera2D")
camera.limit_left = LIMIT_LEFT
camera.limit_top = LIMIT_TOP
camera.limit_right = LIMIT_RIGHT
camera.limit_bottom = LIMIT_BOTTOM

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

View File

@@ -0,0 +1,34 @@
[remap]
importer="texture"
type="StreamTexture"
path="res://.import/tiles_demo.png-68724c3ed5763f2cba827c6d71224f19.stex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://level/tileset/tiles_demo.png"
dest_files=[ "res://.import/tiles_demo.png-68724c3ed5763f2cba827c6d71224f19.stex" ]
[params]
compress/mode=0
compress/lossy_quality=0.7
compress/hdr_mode=0
compress/bptc_ldr=0
compress/normal_map=0
flags/repeat=0
flags/filter=false
flags/mipmaps=false
flags/anisotropic=false
flags/srgb=2
process/fix_alpha_border=true
process/premult_alpha=false
process/HDR_as_SRGB=false
process/invert_color=false
stream=false
size_limit=0
detect_3d=false
svg/scale=1.0

View File

@@ -0,0 +1,335 @@
[gd_resource type="TileSet" load_steps=14 format=2]
[ext_resource path="res://level/tileset/tiles_demo.png" type="Texture" id=1]
[sub_resource type="ConvexPolygonShape2D" id=1]
points = PoolVector2Array( 0, 6, 32, 6, 32, 32, 0, 32 )
[sub_resource type="ConvexPolygonShape2D" id=2]
points = PoolVector2Array( 0, 6, 28, 6, 28, 32, 0, 32 )
[sub_resource type="ConvexPolygonShape2D" id=3]
points = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 )
[sub_resource type="ConvexPolygonShape2D" id=4]
points = PoolVector2Array( 0, 6, 32, 6, 32, 32, 0, 32 )
[sub_resource type="ConvexPolygonShape2D" id=5]
points = PoolVector2Array( 32, 38, 32, 64, 0, 64, 0, 6 )
[sub_resource type="ConvexPolygonShape2D" id=6]
points = PoolVector2Array( 0, 0, 28, 0, 28, 32, 0, 32 )
[sub_resource type="ConvexPolygonShape2D" id=7]
points = PoolVector2Array( 28, 6, 32, 6, 32, 32, 0, 32, 0, 0, 28, 0 )
[sub_resource type="ConvexPolygonShape2D" id=8]
points = PoolVector2Array( 0, 6, 32, 6, 32, 32, 0, 32 )
[sub_resource type="ConvexPolygonShape2D" id=9]
points = PoolVector2Array( 0, 6, 28, 6, 28, 32, 0, 32 )
[sub_resource type="ConvexPolygonShape2D" id=10]
points = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 )
[sub_resource type="ConvexPolygonShape2D" id=11]
points = PoolVector2Array( 0, 0, 32, 0, 32, 24, 0, 24 )
[sub_resource type="ConvexPolygonShape2D" id=12]
points = PoolVector2Array( 0, 0, 28, 0, 28, 24, 0, 24 )
[resource]
0/name = "ground"
0/texture = ExtResource( 1 )
0/tex_offset = Vector2( 0, 0 )
0/modulate = Color( 1, 1, 1, 1 )
0/region = Rect2( 0, 0, 32, 32 )
0/tile_mode = 0
0/occluder_offset = Vector2( 0, 0 )
0/navigation_offset = Vector2( 0, 0 )
0/shape_offset = Vector2( 0, 0 )
0/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 )
0/shape = SubResource( 1 )
0/shape_one_way = false
0/shape_one_way_margin = 1.0
0/shapes = [ {
"autotile_coord": Vector2( 0, 0 ),
"one_way": false,
"one_way_margin": 1.0,
"shape": SubResource( 1 ),
"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
} ]
0/z_index = 0
1/name = "ground_end"
1/texture = ExtResource( 1 )
1/tex_offset = Vector2( 0, 0 )
1/modulate = Color( 1, 1, 1, 1 )
1/region = Rect2( 32, 0, 32, 32 )
1/tile_mode = 0
1/occluder_offset = Vector2( 0, 0 )
1/navigation_offset = Vector2( 0, 0 )
1/shape_offset = Vector2( 0, 0 )
1/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 )
1/shape = SubResource( 2 )
1/shape_one_way = false
1/shape_one_way_margin = 1.0
1/shapes = [ {
"autotile_coord": Vector2( 0, 0 ),
"one_way": false,
"one_way_margin": 1.0,
"shape": SubResource( 2 ),
"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
} ]
1/z_index = 0
2/name = "slope"
2/texture = ExtResource( 1 )
2/tex_offset = Vector2( 0, 0 )
2/modulate = Color( 1, 1, 1, 1 )
2/region = Rect2( 64, 64, 32, 64 )
2/tile_mode = 0
2/occluder_offset = Vector2( 0, 0 )
2/navigation_offset = Vector2( 0, 0 )
2/shape_offset = Vector2( 0, 0 )
2/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 )
2/shape = SubResource( 5 )
2/shape_one_way = false
2/shape_one_way_margin = 1.0
2/shapes = [ {
"autotile_coord": Vector2( 0, 0 ),
"one_way": false,
"one_way_margin": 1.0,
"shape": SubResource( 5 ),
"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
} ]
2/z_index = 0
3/name = "wall"
3/texture = ExtResource( 1 )
3/tex_offset = Vector2( 0, 0 )
3/modulate = Color( 1, 1, 1, 1 )
3/region = Rect2( 32, 32, 32, 32 )
3/tile_mode = 0
3/occluder_offset = Vector2( 0, 0 )
3/navigation_offset = Vector2( 0, 0 )
3/shape_offset = Vector2( 0, 0 )
3/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 )
3/shape = SubResource( 6 )
3/shape_one_way = false
3/shape_one_way_margin = 1.0
3/shapes = [ {
"autotile_coord": Vector2( 0, 0 ),
"one_way": false,
"one_way_margin": 1.0,
"shape": SubResource( 6 ),
"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
} ]
3/z_index = 0
4/name = "slope_top"
4/texture = ExtResource( 1 )
4/tex_offset = Vector2( 0, 0 )
4/modulate = Color( 1, 1, 1, 1 )
4/region = Rect2( 32, 64, 32, 32 )
4/tile_mode = 0
4/occluder_offset = Vector2( 0, 0 )
4/navigation_offset = Vector2( 0, 0 )
4/shape_offset = Vector2( 0, 0 )
4/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 )
4/shape = SubResource( 7 )
4/shape_one_way = false
4/shape_one_way_margin = 1.0
4/shapes = [ {
"autotile_coord": Vector2( 0, 0 ),
"one_way": false,
"one_way_margin": 1.0,
"shape": SubResource( 7 ),
"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
} ]
4/z_index = 0
5/name = "one_way"
5/texture = ExtResource( 1 )
5/tex_offset = Vector2( 0, 0 )
5/modulate = Color( 1, 1, 1, 1 )
5/region = Rect2( 64, 0, 32, 32 )
5/tile_mode = 0
5/occluder_offset = Vector2( 0, 0 )
5/navigation_offset = Vector2( 0, 0 )
5/shape_offset = Vector2( 0, 0 )
5/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 )
5/shape = SubResource( 8 )
5/shape_one_way = true
5/shape_one_way_margin = 1.0
5/shapes = [ {
"autotile_coord": Vector2( 0, 0 ),
"one_way": true,
"one_way_margin": 1.0,
"shape": SubResource( 8 ),
"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
} ]
5/z_index = 0
6/name = "one_way_end"
6/texture = ExtResource( 1 )
6/tex_offset = Vector2( 0, 0 )
6/modulate = Color( 1, 1, 1, 1 )
6/region = Rect2( 96, 0, 32, 32 )
6/tile_mode = 0
6/occluder_offset = Vector2( 0, 0 )
6/navigation_offset = Vector2( 0, 0 )
6/shape_offset = Vector2( 0, 0 )
6/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 )
6/shape = SubResource( 9 )
6/shape_one_way = true
6/shape_one_way_margin = 1.0
6/shapes = [ {
"autotile_coord": Vector2( 0, 0 ),
"one_way": true,
"one_way_margin": 1.0,
"shape": SubResource( 9 ),
"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
} ]
6/z_index = 0
7/name = "rock"
7/texture = ExtResource( 1 )
7/tex_offset = Vector2( 0, 0 )
7/modulate = Color( 1, 1, 1, 1 )
7/region = Rect2( 0, 32, 32, 32 )
7/tile_mode = 0
7/occluder_offset = Vector2( 0, 0 )
7/navigation_offset = Vector2( 0, 0 )
7/shape_offset = Vector2( 0, 0 )
7/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 )
7/shape = SubResource( 10 )
7/shape_one_way = false
7/shape_one_way_margin = 1.0
7/shapes = [ {
"autotile_coord": Vector2( 0, 0 ),
"one_way": false,
"one_way_margin": 1.0,
"shape": SubResource( 10 ),
"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
} ]
7/z_index = 0
8/name = "bottom"
8/texture = ExtResource( 1 )
8/tex_offset = Vector2( 0, 0 )
8/modulate = Color( 1, 1, 1, 1 )
8/region = Rect2( 192, 32, 32, 32 )
8/tile_mode = 0
8/occluder_offset = Vector2( 0, 0 )
8/navigation_offset = Vector2( 0, 0 )
8/shape_offset = Vector2( 0, 0 )
8/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 )
8/shape = SubResource( 11 )
8/shape_one_way = false
8/shape_one_way_margin = 1.0
8/shapes = [ {
"autotile_coord": Vector2( 0, 0 ),
"one_way": false,
"one_way_margin": 1.0,
"shape": SubResource( 11 ),
"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
} ]
8/z_index = 0
9/name = "bottom_end"
9/texture = ExtResource( 1 )
9/tex_offset = Vector2( 0, 0 )
9/modulate = Color( 1, 1, 1, 1 )
9/region = Rect2( 224, 32, 32, 32 )
9/tile_mode = 0
9/occluder_offset = Vector2( 0, 0 )
9/navigation_offset = Vector2( 0, 0 )
9/shape_offset = Vector2( 0, 0 )
9/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 )
9/shape = SubResource( 12 )
9/shape_one_way = false
9/shape_one_way_margin = 1.0
9/shapes = [ {
"autotile_coord": Vector2( 0, 0 ),
"one_way": false,
"one_way_margin": 1.0,
"shape": SubResource( 12 ),
"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
} ]
9/z_index = 0
10/name = "bottom_corner"
10/texture = ExtResource( 1 )
10/tex_offset = Vector2( 0, 0 )
10/modulate = Color( 1, 1, 1, 1 )
10/region = Rect2( 160, 32, 32, 32 )
10/tile_mode = 0
10/occluder_offset = Vector2( 0, 0 )
10/navigation_offset = Vector2( 0, 0 )
10/shape_offset = Vector2( 0, 0 )
10/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 )
10/shape = SubResource( 3 )
10/shape_one_way = false
10/shape_one_way_margin = 1.0
10/shapes = [ {
"autotile_coord": Vector2( 0, 0 ),
"one_way": false,
"one_way_margin": 1.0,
"shape": SubResource( 3 ),
"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
} ]
10/z_index = 0
11/name = "tree_trunk_0"
11/texture = ExtResource( 1 )
11/tex_offset = Vector2( 0, 0 )
11/modulate = Color( 1, 1, 1, 1 )
11/region = Rect2( 128, 64, 32, 32 )
11/tile_mode = 0
11/occluder_offset = Vector2( 0, 0 )
11/navigation_offset = Vector2( 0, 0 )
11/shape_offset = Vector2( 0, 0 )
11/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 )
11/shape_one_way = false
11/shape_one_way_margin = 0.0
11/shapes = [ ]
11/z_index = 0
12/name = "tree_trunk_1"
12/texture = ExtResource( 1 )
12/tex_offset = Vector2( 0, 0 )
12/modulate = Color( 1, 1, 1, 1 )
12/region = Rect2( 128, 32, 32, 32 )
12/tile_mode = 0
12/occluder_offset = Vector2( 0, 0 )
12/navigation_offset = Vector2( 0, 0 )
12/shape_offset = Vector2( 0, 0 )
12/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 )
12/shape_one_way = false
12/shape_one_way_margin = 0.0
12/shapes = [ ]
12/z_index = 0
13/name = "tree_base"
13/texture = ExtResource( 1 )
13/tex_offset = Vector2( 0, 0 )
13/modulate = Color( 1, 1, 1, 1 )
13/region = Rect2( 128, 96, 32, 32 )
13/tile_mode = 0
13/occluder_offset = Vector2( 0, 0 )
13/navigation_offset = Vector2( 0, 0 )
13/shape_offset = Vector2( 0, 0 )
13/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 )
13/shape = SubResource( 4 )
13/shape_one_way = false
13/shape_one_way_margin = 1.0
13/shapes = [ {
"autotile_coord": Vector2( 0, 0 ),
"one_way": false,
"one_way_margin": 1.0,
"shape": SubResource( 4 ),
"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
} ]
13/z_index = 0
14/name = "tree_top"
14/texture = ExtResource( 1 )
14/tex_offset = Vector2( 0, 0 )
14/modulate = Color( 1, 1, 1, 1 )
14/region = Rect2( 128, 0, 32, 32 )
14/tile_mode = 0
14/occluder_offset = Vector2( 0, 0 )
14/navigation_offset = Vector2( 0, 0 )
14/shape_offset = Vector2( 0, 0 )
14/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 )
14/shape_one_way = false
14/shape_one_way_margin = 0.0
14/shapes = [ ]
14/z_index = 0

BIN
2d/skeleton/player/gBot.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 453 KiB

View File

@@ -0,0 +1,34 @@
[remap]
importer="texture"
type="StreamTexture"
path="res://.import/gBot.png-b94e4323e02d18e8c6fabf612fa396da.stex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://player/gBot.png"
dest_files=[ "res://.import/gBot.png-b94e4323e02d18e8c6fabf612fa396da.stex" ]
[params]
compress/mode=0
compress/lossy_quality=0.7
compress/hdr_mode=0
compress/bptc_ldr=0
compress/normal_map=0
flags/repeat=0
flags/filter=true
flags/mipmaps=false
flags/anisotropic=false
flags/srgb=2
process/fix_alpha_border=true
process/premult_alpha=false
process/HDR_as_SRGB=false
process/invert_color=false
stream=false
size_limit=0
detect_3d=true
svg/scale=1.0

View File

@@ -0,0 +1,74 @@
class_name Player
extends KinematicBody2D
# Keep this in sync with the AnimationTree's state names and numbers.
enum States {
IDLE = 0,
WALK = 1,
RUN = 2,
FLY = 3,
FALL = 4,
}
var speed = Vector2(120.0, 360.0)
var velocity = Vector2.ZERO
var falling_slow = false
var falling_fast = false
var no_move_horizontal_time = 0.0
onready var gravity = ProjectSettings.get_setting("physics/2d/default_gravity")
onready var sprite = $Sprite
onready var sprite_scale = sprite.scale.x
func _ready():
$AnimationTree.active = true
func _physics_process(delta):
velocity.y += gravity * delta
if no_move_horizontal_time > 0.0:
# After doing a hard fall, don't move for a short time.
velocity.x = 0.0
no_move_horizontal_time -= delta
else:
velocity.x = (Input.get_action_strength("move_right") - Input.get_action_strength("move_left")) * speed.x
if Input.is_action_pressed("walk"):
velocity.x *= 0.2
#warning-ignore:return_value_discarded
velocity = move_and_slide(velocity, Vector2.UP)
# Calculate flipping and falling speed for animation purposes.
if velocity.x > 0:
sprite.transform.x = Vector2(sprite_scale, 0)
elif velocity.x < 0:
sprite.transform.x = Vector2(-sprite_scale, 0)
if velocity.y > 500:
falling_fast = true
falling_slow = false
elif velocity.y > 300:
falling_slow = true
# Check if on floor and do mostly animation stuff based on it.
if is_on_floor():
if falling_fast:
$AnimationTree["parameters/land_hard/active"] = true
no_move_horizontal_time = 0.4
falling_fast = false
elif falling_slow:
$AnimationTree["parameters/land/active"] = true
falling_slow = false
if Input.is_action_just_pressed("jump"):
$AnimationTree["parameters/jump/active"] = true
velocity.y = -speed.y
if abs(velocity.x) > 50:
$AnimationTree["parameters/state/current"] = States.RUN
$AnimationTree["parameters/run_timescale/scale"] = abs(velocity.x) / 60
elif velocity.x:
$AnimationTree["parameters/state/current"] = States.WALK
$AnimationTree["parameters/walk_timescale/scale"] = abs(velocity.x) / 12
else:
$AnimationTree["parameters/state/current"] = States.IDLE
else:
if velocity.y > 0:
$AnimationTree["parameters/state/current"] = States.FALL
else:
$AnimationTree["parameters/state/current"] = States.FLY

File diff suppressed because it is too large Load Diff

90
2d/skeleton/project.godot Normal file
View File

@@ -0,0 +1,90 @@
; Engine configuration file.
; It's best edited using the editor UI and not directly,
; since the parameters that go here are not all obvious.
;
; Format:
; [section] ; section goes between []
; param=value ; assign values to parameters
config_version=4
_global_script_classes=[ {
"base": "KinematicBody2D",
"class": "Player",
"language": "GDScript",
"path": "res://player/player.gd"
} ]
_global_script_class_icons={
"Player": ""
}
[application]
config/name="Skeleton2D Demo"
run/main_scene="res://level.tscn"
config/icon="res://icon.png"
[display]
window/size/width=1600
window/size/height=900
window/dpi/allow_hidpi=true
window/stretch/mode="2d"
window/stretch/aspect="keep_height"
[input]
move_left={
"deadzone": 0.5,
"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":65,"unicode":0,"echo":false,"script":null)
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777231,"unicode":0,"echo":false,"script":null)
, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":0,"axis":0,"axis_value":-1.0,"script":null)
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":14,"pressure":0.0,"pressed":false,"script":null)
]
}
move_right={
"deadzone": 0.5,
"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":68,"unicode":0,"echo":false,"script":null)
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777233,"unicode":0,"echo":false,"script":null)
, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":0,"axis":0,"axis_value":1.0,"script":null)
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":15,"pressure":0.0,"pressed":false,"script":null)
]
}
jump={
"deadzone": 0.5,
"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":32,"unicode":0,"echo":false,"script":null)
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":0,"pressure":0.0,"pressed":false,"script":null)
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":87,"unicode":0,"echo":false,"script":null)
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777232,"unicode":0,"echo":false,"script":null)
, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":0,"axis":1,"axis_value":-1.0,"script":null)
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":12,"pressure":0.0,"pressed":false,"script":null)
]
}
exit={
"deadzone": 0.5,
"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777217,"unicode":0,"echo":false,"script":null)
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":11,"pressure":0.0,"pressed":false,"script":null)
]
}
walk={
"deadzone": 0.5,
"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777237,"unicode":0,"echo":false,"script":null)
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":1,"pressure":0.0,"pressed":false,"script":null)
]
}
[network]
limits/debugger_stdout/max_chars_per_second=1000000
[physics]
2d/default_gravity=900
[rendering]
quality/driver/driver_name="GLES2"
2d/snapping/use_gpu_pixel_snap=true
vram_compression/import_etc=true
vram_compression/import_etc2=false
quality/2d/use_pixel_snap=true

View File