Godot游戏引擎学习 课外学习:新场景 2

Godot游戏引擎学习 课外学习:新场景 2

29 十二月 2020 代码 游戏开发 Godot

新怪物:飞鱼

做了一个从屏幕右侧往玩家方向无视碰撞快速飞行的飞鱼怪物,并让拓展了之前写的怪物笼场景,可以让怪物随机生成。

随机效果是通过获取游戏场景的高度并乘以一个随机生成的小数达到随机效果,并设置了外部变量让玩家可以控制是否随机生成,且增加了怪物数量的上限

不过目前随机效果不太理想,之后可能要进行改进,设置成固定区域生成,而且飞鱼飞出屏幕之外后还需要让它自我销毁避免占用资源。

具体代码如下:

extends Position2D

# 让外部可以设置打包场景
export var enemy_scene: PackedScene
# 刷新速度
export var interval = 1.0
# 怪物上限
export var max_enmey = 5
# 是否随机
export var rand_position = false

#定时器
onready var timer =$Timer
# 初始怪物数量统计
var enemy_count = 0

func _ready():
	# 如果设置了打包场景
	if enemy_scene:
		# 开始计时
		timer.start(interval)
		

# 每进行一次循环完毕的信号
func _on_Timer_timeout():
	# 如果当前怪物数量统计超过上限则重置为零,继续循环生成
	if enemy_count > max_enmey:
		enemy_count = 0
		return
	
	# 根据设置的打包场景实例化新的怪物对象
	var enemy: Node2D = enemy_scene.instance()
	# 将实例化后的怪物添加到父节点中
	get_parent().add_child(enemy)
	# 并将位置设置为Position的节点
	# 判断是否设置了随机生成
	if rand_position:
		# 如果设置了则获取当前视窗高度乘以一个随机的百分比小数
		var rand_position_y = get_viewport().size.y * randf()
		# 并讲posistion设置为随机点
		enemy.global_position = Vector2(global_position.x, rand_position_y)
	# 如果没设置随机生成则出生在刷新点。
	else:
		enemy.global_position = global_position;
		print(global_position)
	# 添加完后统计数+1	
	enemy_count += 1

飞鱼的代码基本上和Slime一致,我这里就不贴代码了。

extends "res://src/enemies/Enemy.gd"

func _ready():
	# 飞鱼的移动速度更快,但是是直线运动
	max_speed = 500

func _physics_process(_delta):
	# 进行移动操作
	velocity = move_and_slide(velocity, Vector2.UP)

func _process(delta):
	# 如果死了则移动向量设为0
	if is_dead:
		velocity.x = 0
		# 增加重力,下怪物下坠
		velocity.y += gravity * delta
	else:
	# 进行加速移动
		velocity.x = move_toward(velocity.x, max_speed * direction, max_speed * delta)

效果如下

第九课_flyfish