Godot ParallaxBackground 视差背景

(转存失败,看不到效果到这里吧 http://i.scwy.net/it/2020/033016-godot/ )

效果是这样的:

033016-godot-01.gifuploading.4e448015.gif转存失败重新上传取消

说明:

  1. 人物可以自主的休息、走或跑。
  2. 左上角的数字只是为了标识他跑了多远,以及看出他在休息、跑或者走。
  3. Timer节点只是让他能随机有些动作变化,以及背景的连动变化。
  4. 背景分为三层:地面、山、云,它们有不同的运动速度,以体现远近不同。

注意:

  1. 视差背景需要图片超出视窗比较多的位置,否则会出现部份空白的时候。
  2. 这里最重要的语句算是 $bg_ground.scroll_offset.x

节点是这样的:

场景是这样的: 033016-godot-03.pnguploading.4e448015.gif转存失败重新上传取消

不重要的人物动画:

代码

extends Node2D

export var speed = 1000
var man_speed = 0

func _ready():
	randomize()
	_on_Timer_timeout()

func _process(delta):
	$bg_ground.scroll_offset.x -= delta * man_speed
	$bg_mountain.scroll_offset.x -= delta * man_speed/10
	$bg_sky.scroll_offset.x -= delta * man_speed/100
	$Label.text = str(int($bg_ground.scroll_offset.x))

func _on_Timer_timeout():
	var f = randf()
	if f>0.9:
		$Animated.play("walk")
		man_speed = speed / 10
	elif f < 0.2:
		$Animated.play("idle")
		man_speed = 0
	else:
		$Animated.play("run")
		man_speed = speed


给它增加了一些随机效果,比如随时间推移的太阳,地上的花草。随便测试了精灵图片的矩形定位(x,y,width,height)

033016-godot-02.gifuploading.4e448015.gif转存失败重新上传取消

extends Node2D

export var speed = 200
var man_speed = 0
var dongzuo = ""
var other_rect = [ Rect2(1760,370,80,70),Rect2(1840,370,90,70),Rect2(870,640,120,70),Rect2(510,570,70,70),Rect2(490,960,40,50),Rect2(530,1110,40,50),
	Rect2(330,1720,60,60),Rect2(1310,10,50,70),Rect2(1380,30,70,90),Rect2(1150,30,60,50),Rect2(1090,50,50,30),Rect2(880,20,160,160),
	Rect2(670,0,190,180),Rect2(170,160,70,80)]

func _ready():
	randomize()
	_on_Timer_timeout()

func _physics_process(delta):	
	$bg_ground.scroll_offset.x -= delta * man_speed
	$bg_mountain.scroll_offset.x -= delta * man_speed/10
	$bg_sky.scroll_offset.x -= delta * man_speed/100
	for i in range(1,5):
		$bg_ground.get_child(i).position.x -= delta * man_speed
		if $bg_ground.get_child(i).position.x < -100:
			change_other(i)
	OS.set_window_title(dongzuo + "  " + str(int($bg_ground.scroll_offset.x/100)))

func _on_Timer_timeout():
	$Timer.wait_time = rand_range(3,10)	
	var f = randf()
	if f>0.9:
		$Animated.play("walk")
		man_speed = speed / 10
		dongzuo = "步行"
	elif f < 0.2:
		$Animated.play("idle")
		man_speed = 0
		dongzuo = "休息"
	else:
		$Animated.play("run")
		man_speed = speed
		dongzuo = "跑"
	
	sun_local()

func change_other(num):
	var rnd = int(rand_range(0,len(other_rect)))
	var obj = $bg_ground.get_child(num)
	obj.position.x = rand_range(1500,2000)
	#obj.position.y = 600 - other_rect[rnd].height
	obj.region_rect = other_rect[rnd]
	#print(other_rect[rnd].x)

# 太阳的位置
func sun_local():
	var time = OS.get_datetime().hour + OS.get_datetime().minute/60.0
	$bg_mountain/sun.position = Vector2(time * 100 - 750, abs(12.0-time)*50)
	
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值