欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

godot项目实战circle_jump(一)

程序员文章站 2022-04-01 10:32:00
资源来自于github上的开源项目https://github.com/kidscancode/circle_jump步骤参考kidscancode网站的游戏教学项目设置首先新建一个circle_jump项目修改屏幕尺寸为480X854移动设备方向改为垂直将拉伸模式设为2d 拉伸纵横比设为keep勾选此项以使得鼠标能模拟手机触摸完成项目设置后我们建立以下文件夹方便管理文件,并将下载好的资源复制过来objects存放游戏对象UI存放gui文件assets存放游戏资源游戏...

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

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

godot项目实战circle_jump(一)

项目设置

首先新建一个circle_jump项目

godot项目实战circle_jump(一)

修改屏幕尺寸为480X854

移动设备方向改为垂直

godot项目实战circle_jump(一)

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

godot项目实战circle_jump(一)

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

godot项目实战circle_jump(一)

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

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

godot项目实战circle_jump(一)

游戏对象

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

jumper

添加以下节点

  • Area2D(Jumper)
    • Sprite
    • CollisionPolygon2D
    • VisibilityNotifier2D

godot项目实战circle_jump(一)

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

Sprite旋转90

godot项目实战circle_jump(一)

CollisionPolygon2D添加一个三角形状

godot项目实战circle_jump(一)

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

godot项目实战circle_jump(一)

Jumper连接信号area_entered()

godot项目实战circle_jump(一)

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(一)

点击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(一)

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

godot项目实战circle_jump(一)

圆圈

添加以下节点

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

godot项目实战circle_jump(一)

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

添加圆形的碰撞区域

godot项目实战circle_jump(一)

适当修改轨道位置

godot项目实战circle_jump(一)

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

godot项目实战circle_jump(一)

将场景保存为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(一)

运行场景

godot项目实战circle_jump(一)

本文地址:https://blog.csdn.net/qq_25969985/article/details/107900542