extends Node2D class_name CharacterSprite ## 程序化角色精灵 ## 在没有实际精灵图时使用,可以轻松替换为真实精灵 # 角色颜色 var body_color: Color = Color(0.4, 0.6, 0.8) # 身体颜色 var head_color: Color = Color(0.9, 0.8, 0.7) # 头部颜色 # 角色尺寸 const BODY_WIDTH = 32 const BODY_HEIGHT = 48 const HEAD_SIZE = 24 # 节点引用 var body: ColorRect var head: ColorRect var eyes: Node2D func _ready(): _create_character() ## 创建角色视觉 func _create_character(): """程序化创建角色外观""" # 身体 body = ColorRect.new() body.size = Vector2(BODY_WIDTH, BODY_HEIGHT) body.position = Vector2(-BODY_WIDTH / 2.0, -BODY_HEIGHT) body.color = body_color add_child(body) # 头部 head = ColorRect.new() head.size = Vector2(HEAD_SIZE, HEAD_SIZE) head.position = Vector2(-HEAD_SIZE / 2.0, -BODY_HEIGHT - HEAD_SIZE) head.color = head_color add_child(head) # 眼睛 eyes = Node2D.new() eyes.position = Vector2(0, -BODY_HEIGHT - HEAD_SIZE / 2.0) add_child(eyes) # 左眼 var left_eye = ColorRect.new() left_eye.size = Vector2(4, 4) left_eye.position = Vector2(-8, -2) left_eye.color = Color.BLACK eyes.add_child(left_eye) # 右眼 var right_eye = ColorRect.new() right_eye.size = Vector2(4, 4) right_eye.position = Vector2(4, -2) right_eye.color = Color.BLACK eyes.add_child(right_eye) ## 设置角色颜色 func set_character_color(new_body_color: Color, new_head_color: Color = Color(0.9, 0.8, 0.7)): """ 设置角色颜色 @param new_body_color: 身体颜色 @param new_head_color: 头部颜色 """ body_color = new_body_color head_color = new_head_color if body: body.color = body_color if head: head.color = head_color ## 播放行走动画 func play_walk_animation(direction: Vector2): """ 播放行走动画(简单的摇摆效果) @param direction: 移动方向 """ if direction.length() > 0: # 简单的左右摇摆 var tween = create_tween() tween.set_loops() tween.tween_property(self, "rotation", 0.1, 0.3) tween.tween_property(self, "rotation", -0.1, 0.3) else: # 停止动画 rotation = 0 ## 播放空闲动画 func play_idle_animation(): """播放空闲动画(轻微上下浮动)""" var tween = create_tween() tween.set_loops() tween.tween_property(self, "position:y", -2, 1.0) tween.tween_property(self, "position:y", 0, 1.0) ## 生成随机角色颜色 static func generate_random_color() -> Color: """生成随机但好看的角色颜色""" var hue = randf() var saturation = randf_range(0.4, 0.8) var value = randf_range(0.6, 0.9) return Color.from_hsv(hue, saturation, value)