Godot Engine多点触摸游戏示例:双人乒乓球

Godot Engine多点触摸游戏示例:双人乒乓球

【免费下载链接】godot Godot Engine,一个功能丰富的跨平台2D和3D游戏引擎,提供统一的界面用于创建游戏,并拥有活跃的社区支持和开源性质。 【免费下载链接】godot 项目地址: https://gitcode.com/GitHub_Trending/go/godot

你还在为手机游戏开发中的多点触摸控制头疼吗?想让两个玩家在同一屏幕上流畅对战却不知从何下手?本文将带你使用Godot Engine(一个功能丰富的跨平台2D和3D游戏引擎)快速实现双人乒乓球游戏,全程无需复杂代码,只需简单拖拽和基础脚本即可完成。读完本文,你将掌握TouchScreenButton(触摸屏幕按钮)的使用、刚体物理碰撞和多点触摸输入处理等核心技能。

准备工作

首先确保你已安装Godot Engine,官方安装包可从Godot Engine官网获取。本文使用的核心组件包括:

  • 触摸输入系统:通过Godot内置的触摸区域检测系统实现触摸点识别
  • 物理引擎:利用Godot内置的2D物理系统处理球拍和球的碰撞
  • 场景系统:通过节点树组织游戏对象

Godot Engine logo

游戏场景搭建

创建基础场景

  1. 新建2D场景,添加Node2D作为根节点并命名为PingPongGame
  2. 添加KinematicBody2D作为玩家1球拍,命名为Player1Paddle
  3. 添加KinematicBody2D作为玩家2球拍,命名为Player2Paddle
  4. 添加RigidBody2D作为乒乓球,命名为Ball
  5. 添加两个TouchScreenButton作为触摸控制区域,分别命名为LeftTouchAreaRightTouchArea

场景节点结构如下:

PingPongGame (Node2D)
├─ Player1Paddle (KinematicBody2D)
├─ Player2Paddle (KinematicBody2D)
├─ Ball (RigidBody2D)
├─ LeftTouchArea (TouchScreenButton)
└─ RightTouchArea (TouchScreenButton)

设置触摸控制区域

  1. 选中LeftTouchArea,在检查器中设置:

    • Texture Normal:添加一个半透明的矩形图片作为触摸区域视觉提示
    • Shape:使用矩形形状覆盖屏幕左侧1/2区域
    • Action:设置为"move_player1"
    • Visibility Mode:选择"Always"
  2. RightTouchArea执行类似设置,覆盖屏幕右侧1/2区域,Action设置为"move_player2"

触摸区域设置示意图

核心代码实现参考Godot内置触摸检测逻辑:

bool TouchScreenButton::_is_point_inside(const Point2 &p_point) {
    Point2 coord = (get_global_transform_with_canvas()).affine_inverse().xform(p_point);
    // 触摸点检测逻辑...
    return touched;
}

核心功能实现

球拍控制脚本

为两个球拍添加以下GDScript脚本(以Player1Paddle为例):

extends KinematicBody2D

var speed = 500
var screen_size = get_viewport_rect().size

func _process(delta):
    var velocity = Vector2.ZERO
    if Input.is_action_pressed("move_player1_up"):
        velocity.y = -speed
    if Input.is_action_pressed("move_player1_down"):
        velocity.y = speed
    move_and_slide(velocity)
    
    # 限制在屏幕内
    position.y = clamp(position.y, 50, screen_size.y - 50)

乒乓球物理设置

  1. Ball添加CollisionShape2D子节点,形状选择圆形
  2. 在检查器中设置:
    • Mass:1
    • Friction:0
    • Bounce:1.05(略微大于1以增加游戏趣味性)
  3. 添加初始速度脚本:
extends RigidBody2D

func _ready():
    apply_impulse(Vector2(300, 200), global_position)

游戏逻辑完善

得分系统实现

在根节点PingPongGame添加得分跟踪脚本:

extends Node2D

var score_left = 0
var score_right = 0
@onready var score_label = $ScoreLabel

func _on_Ball_body_exited(body):
    if body.name == "RightWall":
        score_left += 1
        reset_ball()
    elif body.name == "LeftWall":
        score_right += 1
        reset_ball()
    update_score()

func update_score():
    score_label.text = str(score_left) + " - " + str(score_right)

func reset_ball():
    $Ball.position = get_viewport_rect().size / 2
    $Ball.linear_velocity = Vector2.ZERO
    $Ball.apply_impulse(Vector2(300 if score_left > score_right else -300, rand_range(-200, 200)), global_position)

游戏界面优化

  1. 添加Label节点显示比分,设置合适的字体大小和位置
  2. 添加上下边界StaticBody2D防止球飞出屏幕
  3. 为触摸区域添加按下状态的视觉反馈,参考Godot内置的按钮状态切换功能:
void TouchScreenButton::set_texture_pressed(const Ref<Texture2D> &p_texture_pressed) {
    // 纹理切换实现...
    queue_redraw();
}

测试与优化

多点触摸测试

在设备或模拟器上测试时,确保两个触摸区域可以独立响应:

  • 同时触摸左右区域,两个球拍应能独立移动
  • 测试不同触摸力度和滑动速度,确保响应流畅

性能优化建议

  1. 为所有静态物体启用Monitorable属性
  2. Project Settings中设置合适的物理更新频率
  3. 复杂场景可使用VisibilityNotifier2D控制节点激活状态

总结与扩展

通过本示例,你已掌握Godot Engine多点触摸游戏开发的核心流程:

  1. 使用TouchScreenButton创建触摸控制区域
  2. 利用物理引擎实现真实的碰撞效果
  3. 处理多点触摸输入与用户界面反馈

游戏最终效果示意图

后续可扩展功能:

  • 添加AI对手模式
  • 实现不同难度级别
  • 添加音效和粒子特效
  • 增加游戏开始界面和得分动画

完整项目代码可参考官方示例库,更多高级技巧请查阅Godot官方文档和示例项目。现在就动手试试,打造你的第一款多点触摸游戏吧!

如果觉得本教程有帮助,请点赞收藏关注三连,下期将带来"Godot手机传感器应用:重力感应互动游戏"教程。

【免费下载链接】godot Godot Engine,一个功能丰富的跨平台2D和3D游戏引擎,提供统一的界面用于创建游戏,并拥有活跃的社区支持和开源性质。 【免费下载链接】godot 项目地址: https://gitcode.com/GitHub_Trending/go/godot

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值