mirror of
https://github.com/godotengine/godot-demo-projects.git
synced 2026-01-05 23:40:07 +01:00
SceneMainLoop -> SceneTree
-=-=-=-=-=-=-=-=-=-=-=-=-=- *YOUR SOURCE MIGHT NOT WORK* For mor information on fix: https://github.com/okamstudio/godot/wiki/devel_scene_tree Other stuff: -Shower of bullets demo -Fixes all around
This commit is contained in:
BIN
2d/shower_of_bullets/bullet.png
Normal file
BIN
2d/shower_of_bullets/bullet.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 477 B |
76
2d/shower_of_bullets/bullets.gd
Normal file
76
2d/shower_of_bullets/bullets.gd
Normal file
@@ -0,0 +1,76 @@
|
|||||||
|
|
||||||
|
extends Node2D
|
||||||
|
|
||||||
|
# This demo is an example of controling a high number of 2D objects with logic and collision without using scene nodes.
|
||||||
|
# This technique is a lot more efficient than using instancing and nodes, but requires more programming and is less visual
|
||||||
|
|
||||||
|
const BULLET_COUNT = 500
|
||||||
|
const SPEED_MIN = 20
|
||||||
|
const SPEED_MAX = 50
|
||||||
|
|
||||||
|
var bullets=[]
|
||||||
|
var shape
|
||||||
|
|
||||||
|
class Bullet:
|
||||||
|
var pos = Vector2()
|
||||||
|
var speed = 1.0
|
||||||
|
var body = RID()
|
||||||
|
|
||||||
|
|
||||||
|
func _draw():
|
||||||
|
|
||||||
|
var t = preload("res://bullet.png")
|
||||||
|
var tofs = -t.get_size()*0.5
|
||||||
|
for b in bullets:
|
||||||
|
draw_texture(t,b.pos+tofs)
|
||||||
|
|
||||||
|
|
||||||
|
func _process(delta):
|
||||||
|
var width = get_viewport_rect().size.x*2.0
|
||||||
|
var mat = Matrix32()
|
||||||
|
for b in bullets:
|
||||||
|
b.pos.x-=b.speed*delta
|
||||||
|
if (b.pos.x < -30):
|
||||||
|
b.pos.x+=width
|
||||||
|
mat.o=b.pos
|
||||||
|
|
||||||
|
Physics2DServer.body_set_state(b.body,Physics2DServer.BODY_STATE_TRANSFORM,mat)
|
||||||
|
|
||||||
|
update()
|
||||||
|
|
||||||
|
|
||||||
|
func _ready():
|
||||||
|
|
||||||
|
shape = Physics2DServer.shape_create(Physics2DServer.SHAPE_CIRCLE)
|
||||||
|
Physics2DServer.shape_set_data(shape,8) #radius
|
||||||
|
|
||||||
|
for i in range(BULLET_COUNT):
|
||||||
|
var b = Bullet.new()
|
||||||
|
b.speed=rand_range(SPEED_MIN,SPEED_MAX)
|
||||||
|
b.body = Physics2DServer.body_create(Physics2DServer.BODY_MODE_KINEMATIC)
|
||||||
|
Physics2DServer.body_set_space(b.body,get_world_2d().get_space())
|
||||||
|
Physics2DServer.body_add_shape(b.body,shape)
|
||||||
|
|
||||||
|
b.pos = Vector2( get_viewport_rect().size * Vector2(randf()*2.0,randf()) ) #twice as long
|
||||||
|
b.pos.x += get_viewport_rect().size.x # start outside
|
||||||
|
var mat = Matrix32()
|
||||||
|
mat.o=b.pos
|
||||||
|
Physics2DServer.body_set_state(b.body,Physics2DServer.BODY_STATE_TRANSFORM,mat)
|
||||||
|
|
||||||
|
bullets.append(b)
|
||||||
|
|
||||||
|
|
||||||
|
set_process(true)
|
||||||
|
|
||||||
|
|
||||||
|
func _exit_tree():
|
||||||
|
for b in bullets:
|
||||||
|
Physics2DServer.free(b.body)
|
||||||
|
|
||||||
|
Physics2DServer.free(shape)
|
||||||
|
# Initalization here
|
||||||
|
bullets.clear()
|
||||||
|
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
16
2d/shower_of_bullets/engine.cfg
Normal file
16
2d/shower_of_bullets/engine.cfg
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
[application]
|
||||||
|
|
||||||
|
name="Bullet Shower"
|
||||||
|
main_scene="res://shower.scn"
|
||||||
|
icon="res://icon.png"
|
||||||
|
|
||||||
|
[display]
|
||||||
|
|
||||||
|
width=1024
|
||||||
|
height=600
|
||||||
|
resizable=true
|
||||||
|
stretch_aspect="keep"
|
||||||
|
|
||||||
|
[physics_2d]
|
||||||
|
|
||||||
|
cell_size=64
|
||||||
BIN
2d/shower_of_bullets/face_happy.png
Normal file
BIN
2d/shower_of_bullets/face_happy.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.2 KiB |
BIN
2d/shower_of_bullets/face_sad.png
Normal file
BIN
2d/shower_of_bullets/face_sad.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.2 KiB |
BIN
2d/shower_of_bullets/icon.png
Normal file
BIN
2d/shower_of_bullets/icon.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 2.7 KiB |
32
2d/shower_of_bullets/shower.gd
Normal file
32
2d/shower_of_bullets/shower.gd
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
|
||||||
|
extends Node2D
|
||||||
|
|
||||||
|
# member variables here, example:
|
||||||
|
# var a=2
|
||||||
|
# var b="textvar"
|
||||||
|
|
||||||
|
var touching=0
|
||||||
|
|
||||||
|
func _input(ev):
|
||||||
|
|
||||||
|
if (ev.type==InputEvent.MOUSE_MOTION):
|
||||||
|
get_node("player").set_pos(ev.pos-Vector2(0,16))
|
||||||
|
|
||||||
|
|
||||||
|
func _on_player_body_enter_shape( body_id, body, body_shape, area_shape ):
|
||||||
|
|
||||||
|
touching+=1
|
||||||
|
if (touching==1):
|
||||||
|
get_node("player/sprite").set_frame(1)
|
||||||
|
|
||||||
|
|
||||||
|
func _on_player_body_exit_shape( body_id, body, body_shape, area_shape ):
|
||||||
|
|
||||||
|
touching-=1
|
||||||
|
if (touching==0):
|
||||||
|
get_node("player/sprite").set_frame(0)
|
||||||
|
|
||||||
|
|
||||||
|
func _ready():
|
||||||
|
set_process_input(true)
|
||||||
|
pass
|
||||||
BIN
2d/shower_of_bullets/shower.scn
Normal file
BIN
2d/shower_of_bullets/shower.scn
Normal file
Binary file not shown.
@@ -12,12 +12,12 @@ func goto_scene(scene):
|
|||||||
#instance the new scene
|
#instance the new scene
|
||||||
current_scene = s.instance()
|
current_scene = s.instance()
|
||||||
#add it to the active scene, as child of root
|
#add it to the active scene, as child of root
|
||||||
get_scene().get_root().add_child(current_scene)
|
get_tree().get_root().add_child(current_scene)
|
||||||
|
|
||||||
|
|
||||||
func _ready():
|
func _ready():
|
||||||
# get the current scene
|
# get the current scene
|
||||||
# it is always the last child of root,
|
# it is always the last child of root,
|
||||||
# after the autoloaded nodes
|
# after the autoloaded nodes
|
||||||
var root = get_scene().get_root()
|
var root = get_tree().get_root()
|
||||||
current_scene = root.get_child( root.get_child_count() -1 )
|
current_scene = root.get_child( root.get_child_count() -1 )
|
||||||
|
|||||||
@@ -5,11 +5,11 @@ extends Spatial
|
|||||||
func _on_pause_pressed():
|
func _on_pause_pressed():
|
||||||
get_node("pause_popup").set_exclusive(true)
|
get_node("pause_popup").set_exclusive(true)
|
||||||
get_node("pause_popup").popup()
|
get_node("pause_popup").popup()
|
||||||
get_scene().set_pause(true)
|
get_tree().set_pause(true)
|
||||||
|
|
||||||
|
|
||||||
func _on_unpause_pressed():
|
func _on_unpause_pressed():
|
||||||
get_node("pause_popup").hide()
|
get_node("pause_popup").hide()
|
||||||
get_scene().set_pause(false)
|
get_tree().set_pause(false)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user