用claude ai 设计应用,居然真的可行

in hive-180932 •  6 days ago 

最近有个接活的机会,需求是制作一个在地图上展示广告位的应用。于是我决定先做一个简单的demo给对方看看是否符合要求。

我决定使用godot游戏引擎来做,不过我也并不是很熟悉godot。所以让号称编程能力最强的claude ai来帮助我。

godot的是个游戏引擎,使用它还需要很多操作,不是仅仅编码就可以的。claude ai能指导我吗?

下面是我的提示词,特地规定了输出答复的格式中包括“操作步骤”的部分。

# Role
你是godot游戏制作专家。
## profile
专业,思考细腻周全,逻辑严密。
## task
### 任务目标
按用户要求,为使用godot游戏引擎制作游戏提供步骤指导和编写相应的GDscript代码。
### 游戏玩法描述
一个简单的地图展示应用,
- 用3D引擎实现;
- 游戏主体是一个有地图贴图的的正方形平面;
- 在平面上面有若干定位图标,这些图标都是独立的几何体;
- 当点击这些定位图标中的任何一个时,摄像机都会移动将被点击的图标置于画面中心,然后向该图标推近,将它放大;
- 再画面中增加一个平面,正面朝向摄像机,平面的纹理贴图是一个和改图标相对应的jpg照片;
- 屏幕又下有一个“home”按钮,点击它,摄像头将移动到初始位置,展示整个地图和所有定位图标;
### 任务要求
步骤描述里面要给出需要建立哪些节点,进行哪些设置。需要使用GDscript脚本在脚本项目下给出。
### 输出格式
<xxxx>为占位符
"""
### 步骤描述
<步骤描述>
### 所需脚本
<GDscript脚本>
## 任务初始化
按照 <task> 中用户所提游戏玩法描述,完成<task>.<任务目标>,并按<输出格式>输出


下面是claude给我的回复:
我将帮您设计这个3D地图展示应用。让我们按步骤实现这个功能。
步骤描述

场景构建:

创建一个新的3D场景,根节点设为Node3D
添加以下子节点:

MeshInstance3D (命名为"Ground") - 用于显示地图
Camera3D - 用于观察场景
DirectionalLight3D - 提供基础光照
Control - 用于放置UI元素
若干MeshInstance3D作为位置标记(命名为"Marker_1", "Marker_2"等)
Sprite3D (命名为"PhotoPlane") - 用于显示照片

节点设置:

Ground:

设置为PlaneMesh
应用地图贴图材质
适当调整大小

Camera3D:

设置初始位置(0, 10, 10)和俯视角度(-45度)

Marker:

使用CylinderMesh或自定义3D模型
设置合适的缩放和位置
添加碰撞形状(CollisionShape3D)和Area3D组件

PhotoPlane:

初始隐藏
设置为始终面向摄像机

Control:

添加Button子节点,设置为"Home"按钮
放置在屏幕底部中央

交互实现:

为每个Marker添加点击检测
实现摄像机动画过渡
实现照片展示和隐藏
实现Home按钮功能

所需脚本

gdscriptCopy # 主场景脚本 (main.gd)
extends Node3D

var camera: Camera3D
var photo_plane: Sprite3D
var tween: Tween
var initial_camera_pos: Vector3
var initial_camera_rot: Vector3

func _ready():
    # 获取节点引用
    camera = $Camera3D
    photo_plane = $PhotoPlane
    
    # 保存相机初始状态
    initial_camera_pos = camera.position
    initial_camera_rot = camera.rotation_degrees
    
    # 设置照片平面初始状态
    photo_plane.visible = false
    
    # 为所有标记添加信号连接
    for marker in get_tree().get_nodes_in_group("markers"):
        marker.input_event.connect(_on_marker_clicked.bind(marker))

func _on_marker_clicked(camera: Node, event: InputEvent, position: Vector3, normal: Vector3, shape_idx: int, marker: Area3D):
    if event is InputEventMouseButton and event.pressed and event.button_index == MOUSE_BUTTON_LEFT:
        move_camera_to_marker(marker)

func move_camera_to_marker(marker: Area3D):
    # 停止之前的动画
    if tween:
        tween.kill()
    
    # 创建新的动画
    tween = create_tween()
    tween.set_parallel(true)
    
    # 计算目标位置和旋转
    var target_pos = marker.global_position + Vector3(0, 2, 3)
    var target_rot = Vector3(-20, 0, 0)
    
    # 设置相机动画
    tween.tween_property(camera, "position", target_pos, 1.0).set_trans(Tween.TRANS_CUBIC)
    tween.tween_property(camera, "rotation_degrees", target_rot, 1.0).set_trans(Tween.TRANS_CUBIC)
    
    # 显示对应照片
    tween.tween_callback(func():
        photo_plane.texture = load("res://photos/" + marker.name + ".jpg")
        photo_plane.global_position = marker.global_position + Vector3(0, 2, 0)
        photo_plane.visible = true
    )

func _on_home_button_pressed():
    if tween:
        tween.kill()
    
    tween = create_tween()
    tween.set_parallel(true)
    
    # 恢复相机初始状态
    tween.tween_property(camera, "position", initial_camera_pos, 1.0).set_trans(Tween.TRANS_CUBIC)
    tween.tween_property(camera, "rotation_degrees", initial_camera_rot, 1.0).set_trans(Tween.TRANS_CUBIC)
    
    # 隐藏照片
    tween.tween_callback(func():
        photo_plane.visible = false
    )

# 标记脚本 (marker.gd)
extends Area3D

func _ready():
    # 将标记添加到组
    add_to_group("markers")

没想到AI真的理解了我的意图,照着它的步骤一步一步的操作,将给出的代码脚本关联到对应的节点上,真的可以正常工作。

Authors get paid when people like you upvote their post.
If you enjoyed what you read here, create your account today and start earning FREE STEEM!
Sort Order:  

Upvoted! Thank you for supporting witness @jswit.

很详细的教程 good