godot项目实战circle_jump(一)

资源来自于github上的开源项目https://github.com/kidscancode/circle_jump

步骤参考kidscancode网站的游戏教学

godot项目实战circle_jump(一)_第1张图片

项目设置

首先新建一个circle_jump项目

godot项目实战circle_jump(一)_第2张图片

修改屏幕尺寸为480X854

移动设备方向改为垂直

godot项目实战circle_jump(一)_第3张图片

将拉伸模式设为2d 拉伸纵横比设为keep

godot项目实战circle_jump(一)_第4张图片

勾选此项以使得鼠标能模拟手机触摸

godot项目实战circle_jump(一)_第5张图片

完成项目设置后我们建立以下文件夹方便管理文件,并将下载好的资源复制过来

  • objects存放游戏对象
  • UI存放gui文件
  • assets存放游戏资源

godot项目实战circle_jump(一)_第6张图片

游戏对象

接下来我们只做玩家(jumper)和圆圈

jumper

添加以下节点

  • Area2D(Jumper)
    • Sprite
    • CollisionPolygon2D
    • VisibilityNotifier2D

godot项目实战circle_jump(一)_第7张图片

Sprite添加纹理图片res://assets/images/jumper.png

Sprite旋转90

godot项目实战circle_jump(一)_第8张图片

CollisionPolygon2D添加一个三角形状

godot项目实战circle_jump(一)_第9张图片

保存场景jumper.tscn并为其添加脚本jumper.gd

godot项目实战circle_jump(一)_第10张图片

Jumper连接信号area_entered()

godot项目实战circle_jump(一)_第11张图片

jumper.gd

extends Area2D

var velocity = Vector2(100, 0)
var jump_speed = 1000
var target = null

func _unhandled_input(event):
	if target and event is InputEventScreenTouch and event.pressed:
		jump()

func jump():
	target = null
	velocity = transform.x * jump_speed

func _on_Jumper_area_entered(area):
	target = area
	velocity = Vector2()

func _physics_process(delta):
	if target:
		transform = target.orbit_position.global_transform
	else:
		position += velocity * delta

着色器

使用着色器,以便我们可以自定义Sprite的颜色

SpriteMaterial属性中添加一个新的ShaderMaterial,再新建一个新的Shader

godot项目实战circle_jump(一)_第12张图片

点击Shade按钮在编辑其中添加以下代码

shader_type canvas_item;

uniform vec4 color : hint_color;

void fragment() {
    COLOR.rgb = color.rgb;
    COLOR.a = texture(TEXTURE, UV).a;
}

并可适当修改Color属性的值

godot项目实战circle_jump(一)_第13张图片

为了方便复用,将shader保存为res://objects/color.shader

godot项目实战circle_jump(一)_第14张图片

圆圈

添加以下节点

  • Area2D (Circle)
    • Sprite
    • CollisionShape2D
    • Node2D(Pivot)
      • Position2D(OrbitPosition)

godot项目实战circle_jump(一)_第15张图片

使用res://assets/images/circle_1.png作为Sprite

添加圆形的碰撞区域

godot项目实战circle_jump(一)_第16张图片

适当修改轨道位置

godot项目实战circle_jump(一)_第17张图片

新建shader并加载之前保存的shader

godot项目实战circle_jump(一)_第18张图片

将场景保存为circle.tscn并添加circle.gd脚本

extends Area2D

onready var orbit_position = $Pivot/OrbitPosition
var radius = 100
var rotation_speed = PI

func _ready():
    init()

func init(_radius=radius):
    radius = _radius
    $CollisionShape2D.shape = $CollisionShape2D.shape.duplicate()
    $CollisionShape2D.shape.radius = radius
    var img_size = $Sprite.texture.get_size().x / 2
    $Sprite.scale = Vector2(1, 1) * radius / img_size
    orbit_position.position.x = radius + 25

func _process(delta):
    $Pivot.rotation += rotation_speed * delta

测试

新建Main.tscn

添加Circle和Jumper,并摆放到适当位置

godot项目实战circle_jump(一)_第19张图片

运行场景

godot项目实战circle_jump(一)_第20张图片

你可能感兴趣的:(godot项目实战circle_jump(一))