Cocos Creator引擎开发:Cocos Creator基础入门_(8).UI系统

UI系统

在虚拟现实游戏中,用户界面(UI)是玩家与游戏互动的重要途径。Cocos Creator 提供了强大的 UI 系统,可以帮助开发者创建丰富多样的界面元素。本节将详细介绍 Cocos Creator 的 UI 系统,包括常见的 UI 组件、布局方式、交互事件处理以及如何创建自定义 UI 组件。

常见的 UI 组件

Cocos Creator 中提供了多种常见的 UI 组件,这些组件可以满足大多数游戏界面的需求。以下是一些常用的 UI 组件及其基本用法:

Label

Label 组件用于显示文本。它支持多种文本样式,如字体、颜色、对齐方式等。

创建和使用 Label
  1. 在场景中创建一个 Node,然后添加 Label 组件。

  2. 设置 Label 组件的属性,如字体、颜色、对齐方式等。


// 创建一个 Label 节点

const labelNode = new Node();

labelNode.addComponent(Label);

labelNode.setPosition(0, 0);



// 获取 Label 组件并设置属性

const labelComponent = labelNode.getComponent(Label);

labelComponent.string = "Hello, Cocos Creator!";

labelComponent.fontSize = 50;

labelComponent.color = new Color(255, 0, 0, 255); // 红色



// 将节点添加到场景中

this.node.addChild(labelNode);

Button

Button 组件用于创建按钮,支持按下、抬起、点击等交互事件。

创建和使用 Button
  1. 在场景中创建一个 Node,然后添加 Button 组件。

  2. 设置 Button 组件的属性,如点击时的响应、按下时的动画等。

  3. 为按钮添加点击事件处理函数。


// 创建一个 Button 节点

const buttonNode = new Node();

buttonNode.addComponent(Button);

buttonNode.addComponent(Sprite); // 添加 Sprite 组件用于显示按钮图像

buttonNode.setPosition(0, 100);



// 获取 Button 组件并设置属性

const buttonComponent = buttonNode.getComponent(Button);

buttonComponent.transition = Button.Transition.SCALE; // 设置按钮按下时的动画效果

buttonComponent.zoomScale = 1.2; // 设置缩放比例



// 为按钮添加点击事件

buttonComponent.clickEvents.push({

    target: this.node,

    component: "HelloWorld",

    handler: "onButtonClick",

    customEventData: "Button 1"

});



// 将节点添加到场景中

this.node.addChild(buttonNode);



// 定义点击事件处理函数

@ccclass("HelloWorld")

export class HelloWorld extends Component {

    @cctype(Button)

    @ccproperty

    public button: Button = null;



    public onButtonClick(event: Event, customEventData: string) {

        console.log("Button clicked: " + customEventData);

    }

}

Image

Image 组件用于在界面上显示图像。它可以用于显示静态图像或动态图像(如精灵图集)。

创建和使用 Image
  1. 在场景中创建一个 Node,然后添加 Image 组件。

  2. 设置 Image 组件的属性,如图像资源、类型等。


// 创建一个 Image 节点

const imageNode = new Node();

imageNode.addComponent(Image);

imageNode.setPosition(0, -100);



// 获取 Image 组件并设置属性

const imageComponent = imageNode.getComponent(Image);

imageComponent.spriteFrame = this.getSpriteFrameByName("exampleImage"); // 设置图像资源



// 将节点添加到场景中

this.node.addChild(imageNode);



// 获取 SpriteFrame 的方法

private getSpriteFrameByName(name: string): SpriteFrame {

    const asset = resources.get(name, SpriteFrame);

    return asset;

}

Scroll View

Scroll View 组件用于创建可滚动的界面,如滚动列表、滚动文本等。

创建和使用 Scroll View
  1. 在场景中创建一个 Node,然后添加 Scroll View 组件。

  2. 设置 Scroll View 组件的属性,如滚动方向、滚动速度等。

  3. Scroll View 添加内容节点,并设置内容的布局方式。


// 创建一个 Scroll View 节点

const scrollViewNode = new Node();

scrollViewNode.addComponent(ScrollView);

scrollViewNode.setPosition(0, 0);



// 获取 Scroll View 组件并设置属性

const scrollViewComponent = scrollViewNode.getComponent(ScrollView);

scrollViewComponent.direction = ScrollView.Direction.VERTICAL; // 设置滚动方向为垂直

scrollViewComponent.inertia = true; // 开启惯性滚动

scrollViewComponent.elastic = true; // 开启弹性效果



// 创建内容节点

const contentNode = new Node();

contentNode.addComponent(List); // 使用 List 组件来管理内容

contentNode.setPosition(0, 0);



// 为内容节点添加多个子节点

for (let i = 0; i < 10; i++) {

    const itemNode = new Node();

    itemNode.addComponent(Label);

    itemNode.setPosition(0, i * 100);

    const itemLabel = itemNode.getComponent(Label);

    itemLabel.string = "Item " + (i + 1);

    itemLabel.fontSize = 30;

    itemLabel.color = new Color(0, 0, 0, 255); // 黑色



    contentNode.addChild(itemNode);

}



// 将内容节点添加到 Scroll View 的视图区域

scrollViewComponent.content = contentNode;



// 将 Scroll View 节点添加到场景中

this.node.addChild(scrollViewNode);

ListView

ListView 组件用于创建列表视图,支持水平和垂直滚动。

创建和使用 ListView
  1. 在场景中创建一个 Node,然后添加 ListView 组件。

  2. 设置 ListView 组件的属性,如滚动方向、每个项目的大小等。

  3. ListView 添加数据源,并设置数据项的模板。


// 创建一个 ListView 节点

const listViewNode = new Node();

listViewNode.addComponent(ListView);

listViewNode.setPosition(0, 0);



// 获取 ListView 组件并设置属性

const listViewComponent = listViewNode.getComponent(ListView);

listViewComponent.direction = ListView.Direction.VERTICAL; // 设置滚动方向为垂直

listViewComponent.itemSize = new Size(200, 100); // 设置每个项目的大小



// 创建数据源

const data = ["Item 1", "Item 2", "Item 3", "Item 4", "Item 5", "Item 6", "Item 7", "Item 8", "Item 9", "Item 10"];



// 设置数据项的模板

listViewComponent.itemRenderer = (index: number, itemNode: Node) => {

    const labelComponent = itemNode.getComponent(Label);

    if (!labelComponent) {

        labelComponent = itemNode.addComponent(Label);

        labelComponent.fontSize = 30;

        labelComponent.color = new Color(0, 0, 0, 255); // 黑色

    }

    labelComponent.string = data[index];

};



// 设置数据源

listViewComponent.dataSource = data;



// 将 ListView 节点添加到场景中

this.node.addChild(listViewNode);

Slider

Slider 组件用于创建滑块,常用于设置游戏音量、进度条等。

创建和使用 Slider
  1. 在场景中创建一个 Node,然后添加 Slider 组件。

  2. 设置 Slider 组件的属性,如滑块的范围、当前值等。

  3. 为滑块添加事件处理函数。


// 创建一个 Slider 节点

const sliderNode = new Node();

sliderNode.addComponent(Slider);

sliderNode.setPosition(0, 0);



// 获取 Slider 组件并设置属性

const sliderComponent = sliderNode.getComponent(Slider);

sliderComponent.handle = this.createSliderHandle(); // 设置滑块的柄

sliderComponent.progress = 0.5; // 设置滑块的初始值



// 为滑块添加事件处理函数

sliderComponent.progressEvent = new CCComponent.EventHandler();

sliderComponent.progressEvent.target = this.node;

sliderComponent.progressEvent.component = "HelloWorld";

sliderComponent.progressEvent.handler = "onSliderProgress";

sliderComponent.progressEvent.customEventData = "Slider 1";



// 将 Slider 节点添加到场景中

this.node.addChild(sliderNode);



// 创建滑块的柄

private createSliderHandle(): Node {

    const handleNode = new Node();

    handleNode.addComponent(Image);

    const handleComponent = handleNode.getComponent(Image);

    handleComponent.spriteFrame = this.getSpriteFrameByName("handleImage"); // 设置柄的图像资源

    return handleNode;

}



// 定义滑块事件处理函数

@ccclass("HelloWorld")

export class HelloWorld extends Component {

    @cctype(Slider)

    @ccproperty

    public slider: Slider = null;



    public onSliderProgress(event: Event, customEventData: string) {

        console.log("Slider progress: " + this.slider.progress + " - " + customEventData);

    }

}

Toggle

Toggle 组件用于创建开关按钮,常用于设置游戏选项。

创建和使用 Toggle
  1. 在场景中创建一个 Node,然后添加 Toggle 组件。

  2. 设置 Toggle 组件的属性,如开关的图像、初始状态等。

  3. 为开关添加事件处理函数。


// 创建一个 Toggle 节点

const toggleNode = new Node();

toggleNode.addComponent(Toggle);

toggleNode.addComponent(Image); // 添加 Image 组件用于显示开关图像

toggleNode.setPosition(0, 0);



// 获取 Toggle 组件并设置属性

const toggleComponent = toggleNode.getComponent(Toggle);

toggleComponent.target = this.node; // 设置目标节点

toggleComponent.targetComponent = "HelloWorld"; // 设置目标组件

toggleComponent.targetHandler = "onToggleChange"; // 设置事件处理函数

toggleComponent.default = false; // 设置初始状态为关闭



// 为 Toggle 设置图像

const imageComponent = toggleNode.getComponent(Image);

imageComponent.spriteFrame = this.getSpriteFrameByName("toggleImage"); // 设置开关的图像资源



// 创建 Toggle 的选中标记

const checkMarkNode = new Node();

checkMarkNode.addComponent(Image);

checkMarkNode.setPosition(0, 0);

const checkMarkComponent = checkMarkNode.getComponent(Image);

checkMarkComponent.spriteFrame = this.getSpriteFrameByName("checkMarkImage"); // 设置选中标记的图像资源



// 将选中标记添加到 Toggle

toggleComponent.checkMark = checkMarkNode;



// 将 Toggle 节点添加到场景中

this.node.addChild(toggleNode);



// 定义开关事件处理函数

@ccclass("HelloWorld")

export class HelloWorld extends Component {

    @cctype(Toggle)

    @ccproperty

    public toggle: Toggle = null;



    public onToggleChange(event: Event, customEventData: string) {

        console.log("Toggle changed: " + this.toggle.isChecked + " - " + customEventData);

    }

}

ProgressBar

ProgressBar 组件用于显示进度条,常用于显示玩家的生命值、能量条等。

创建和使用 ProgressBar
  1. 在场景中创建一个 Node,然后添加 ProgressBar 组件。

  2. 设置 ProgressBar 组件的属性,如进度条的图像、当前进度等。


// 创建一个 ProgressBar 节点

const progressBarNode = new Node();

progressBarNode.addComponent(ProgressBar);

progressBarNode.setPosition(0, 0);



// 获取 ProgressBar 组件并设置属性

const progressBarComponent = progressBarNode.getComponent(ProgressBar);

progressBarComponent.totalLength = 200; // 设置进度条的总长度

progressBarComponent.progress = 0.5; // 设置进度条的初始进度



// 为 ProgressBar 设置图像

const barImageNode = new Node();

barImageNode.addComponent(Image);

barImageNode.setPosition(0, 0);

const barImageComponent = barImageNode.getComponent(Image);

barImageComponent.spriteFrame = this.getSpriteFrameByName("barImage"); // 设置进度条的图像资源



// 将图像节点添加到 ProgressBar

progressBarComponent.progressImage = barImageNode;



// 将 ProgressBar 节点添加到场景中

this.node.addChild(progressBarNode);

TextField

TextField 组件用于创建可编辑的文本框,常用于输入玩家名称、聊天内容等。

创建和使用 TextField
  1. 在场景中创建一个 Node,然后添加 TextField 组件。

  2. 设置 TextField 组件的属性,如字体、输入类型等。

  3. 为文本框添加输入事件处理函数。


// 创建一个 TextField 节点

const textFieldNode = new Node();

textFieldNode.addComponent(TextField);

textFieldNode.setPosition(0, 0);



// 获取 TextField 组件并设置属性

const textFieldComponent = textFieldNode.getComponent(TextField);

textFieldComponent.string = ""; // 初始为空

textFieldComponent.fontSize = 30;

textFieldComponent.inputMode = TextField.InputMode.SINGLE_LINE; // 设置输入模式为单行



// 为 TextField 添加输入事件处理函数

textFieldComponent.node.on(Node.EventType.INPUT, (event: Event) => {

    console.log("TextField input: " + textFieldComponent.string);

});



// 将 TextField 节点添加到场景中

this.node.addChild(textFieldNode);

布局方式

Cocos Creator 提供了多种布局方式,可以帮助开发者更方便地管理 UI 元素的位置和大小。以下是一些常用的布局方式及其用法:

Horizontal Layout

Horizontal Layout 组件用于水平排列 UI 元素。

创建和使用 Horizontal Layout
  1. 在场景中创建一个 Node,然后添加 Horizontal Layout 组件。

  2. 为布局节点添加多个子节点,并设置子节点的属性。


// 创建一个 Horizontal Layout 节点

const layoutNode = new Node();

layoutNode.addComponent(HorizontalLayout);

layoutNode.setPosition(0, 0);



// 获取 Horizontal Layout 组件并设置属性

const layoutComponent = layoutNode.getComponent(HorizontalLayout);

layoutComponent.spacing = 10; // 设置子节点之间的间距



// 为布局节点添加多个子节点

const labels = ["Label 1", "Label 2", "Label 3"];

labels.forEach((labelText, index) => {

    const labelNode = new Node();

    labelNode.addComponent(Label);

    labelNode.setPosition(0, 0);

    const labelComponent = labelNode.getComponent(Label);

    labelComponent.string = labelText;

    labelComponent.fontSize = 30;

    labelComponent.color = new Color(0, 0, 0, 255); // 黑色



    layoutNode.addChild(labelNode);

});



// 将布局节点添加到场景中

this.node.addChild(layoutNode);

Vertical Layout

Vertical Layout 组件用于垂直排列 UI 元素。

创建和使用 Vertical Layout
  1. 在场景中创建一个 Node,然后添加 Vertical Layout 组件。

  2. 为布局节点添加多个子节点,并设置子节点的属性。


// 创建一个 Vertical Layout 节点

const layoutNode = new Node();

layoutNode.addComponent(VerticalLayout);

layoutNode.setPosition(0, 0);



// 获取 Vertical Layout 组件并设置属性

const layoutComponent = layoutNode.getComponent(VerticalLayout);

layoutComponent.spacing = 10; // 设置子节点之间的间距



// 为布局节点添加多个子节点

const labels = ["Label 1", "Label 2", "Label 3"];

labels.forEach((labelText, index) => {

    const labelNode = new Node();

    labelNode.addComponent(Label);

    labelNode.setPosition(0, 0);

    const labelComponent = labelNode.getComponent(Label);

    labelComponent.string = labelText;

    labelComponent.fontSize = 30;

    labelComponent.color = new Color(0, 0, 0, 255); // 黑色



    layoutNode.addChild(labelNode);

});



// 将布局节点添加到场景中

this.node.addChild(layoutNode);

Grid Layout

Grid Layout 组件用于以网格形式排列 UI 元素。

创建和使用 Grid Layout
  1. 在场景中创建一个 Node,然后添加 Grid Layout 组件。

  2. 为布局节点添加多个子节点,并设置子节点的属性。


// 创建一个 Grid Layout 节点

const layoutNode = new Node();

layoutNode.addComponent(GridLayout);

layoutNode.setPosition(0, 0);



// 获取 Grid Layout 组件并设置属性

const layoutComponent = layoutNode.getComponent(GridLayout);

layoutComponent.cellSize = new Size(100, 100); // 设置每个单元格的大小

layoutComponent.spacingX = 10; // 设置横向间距

layoutComponent.spacingY = 10; // 设置纵向间距



// 为布局节点添加多个子节点

const labels = ["Label 1", "Label 2", "Label 3", "Label 4", "Label 5", "Label 6"];

labels.forEach((labelText, index) => {

    const labelNode = new Node();

    labelNode.addComponent(Label);

    labelNode.setPosition(0, 0);

    const labelComponent = labelNode.getComponent(Label);

    labelComponent.string = labelText;

    labelComponent.fontSize = 30;

    labelComponent.color = new Color(0, 0, 0, 255); // 黑色



    layoutNode.addChild(labelNode);

});



// 将布局节点添加到场景中

this.node.addChild(layoutNode);

Content Size Fitter

Content Size Fitter 组件用于自动调整布局节点的大小,使其适应子节点的内容。这对于动态生成的 UI 元素非常有用,可以确保布局节点始终能够正确地显示所有内容。

创建和使用 Content Size Fitter
  1. 在场景中创建一个 Node,然后添加 Content Size Fitter 组件。

  2. 为布局节点添加多个子节点,并设置子节点的属性。


// 创建一个 Content Size Fitter 节点

const layoutNode = new Node();

layoutNode.addComponent(ContentSizeFitter);

layoutNode.addComponent(VerticalLayout);

layoutNode.setPosition(0, 0);



// 获取 Content Size Fitter 组件并设置属性

const fitterComponent = layoutNode.getComponent(ContentSizeFitter);

fitterComponent.verticalFit = true; // 垂直方向上适应内容大小



// 为布局节点添加多个子节点

const labels = ["Label 1", "Label 2", "Label 3"];

labels.forEach((labelText, index) => {

    const labelNode = new Node();

    labelNode.addComponent(Label);

    labelNode.setPosition(0, 0);

    const labelComponent = labelNode.getComponent(Label);

    labelComponent.string = labelText;

    labelComponent.fontSize = 30;

    labelComponent.color = new Color(0, 0, 0, 255); // 黑色



    layoutNode.addChild(labelNode);

});



// 将布局节点添加到场景中

this.node.addChild(layoutNode);

Layout Group

Layout Group 组件用于管理多个子节点的布局,可以自动调整子节点的位置和大小。它包括 Horizontal Layout GroupVertical Layout GroupGrid Layout Group

创建和使用 Layout Group
  1. 在场景中创建一个 Node,然后添加 Layout Group 组件。

  2. 为布局节点添加多个子节点,并设置子节点的属性。


// 创建一个 Layout Group 节点

const layoutGroupNode = new Node();

layoutGroupNode.addComponent(VerticalLayoutGroup);

layoutGroupNode.setPosition(0, 0);



// 获取 Layout Group 组件并设置属性

const layoutGroupComponent = layoutGroupNode.getComponent(VerticalLayoutGroup);

layoutGroupComponent.spacing = 10; // 设置子节点之间的间距

layoutGroupComponent.padding = new Rect(10, 10, 10, 10); // 设置内边距



// 为布局节点添加多个子节点

const labels = ["Label 1", "Label 2", "Label 3"];

labels.forEach((labelText, index) => {

    const labelNode = new Node();

    labelNode.addComponent(Label);

    labelNode.setPosition(0, 0);

    const labelComponent = labelNode.getComponent(Label);

    labelComponent.string = labelText;

    labelComponent.fontSize = 30;

    labelComponent.color = new Color(0, 0, 0, 255); // 黑色



    layoutGroupNode.addChild(labelNode);

});



// 将布局节点添加到场景中

this.node.addChild(layoutGroupNode);

交互事件处理

在 Cocos Creator 中,交互事件处理是创建响应式 UI 的关键。常见的交互事件包括点击、拖动、滚动等。以下是一些处理交互事件的方法:

点击事件

  1. Node 添加 Button 组件。

  2. Button 组件添加点击事件。


// 创建一个 Button 节点

const buttonNode = new Node();

buttonNode.addComponent(Button);

buttonNode.addComponent(Sprite); // 添加 Sprite 组件用于显示按钮图像

buttonNode.setPosition(0, 100);



// 获取 Button 组件并设置属性

const buttonComponent = buttonNode.getComponent(Button);

buttonComponent.transition = Button.Transition.SCALE; // 设置按钮按下时的动画效果

buttonComponent.zoomScale = 1.2; // 设置缩放比例



// 为按钮添加点击事件

buttonComponent.clickEvents.push({

    target: this.node,

    component: "HelloWorld",

    handler: "onButtonClick",

    customEventData: "Button 1"

});



// 将节点添加到场景中

this.node.addChild(buttonNode);



// 定义点击事件处理函数

@ccclass("HelloWorld")

export class HelloWorld extends Component {

    public onButtonClick(event: Event, customEventData: string) {

        console.log("Button clicked: " + customEventData);

    }

}

滑动事件

  1. Node 添加 Slider 组件。

  2. Slider 组件添加进度变化事件。


// 创建一个 Slider 节点

const sliderNode = new Node();

sliderNode.addComponent(Slider);

sliderNode.setPosition(0, 0);



// 获取 Slider 组件并设置属性

const sliderComponent = sliderNode.getComponent(Slider);

sliderComponent.handle = this.createSliderHandle(); // 设置滑块的柄

sliderComponent.progress = 0.5; // 设置滑块的初始值



// 为滑块添加事件处理函数

sliderComponent.progressEvent = new CCComponent.EventHandler();

sliderComponent.progressEvent.target = this.node;

sliderComponent.progressEvent.component = "HelloWorld";

sliderComponent.progressEvent.handler = "onSliderProgress";

sliderComponent.progressEvent.customEventData = "Slider 1";



// 将 Slider 节点添加到场景中

this.node.addChild(sliderNode);



// 创建滑块的柄

private createSliderHandle(): Node {

    const handleNode = new Node();

    handleNode.addComponent(Image);

    const handleComponent = handleNode.getComponent(Image);

    handleComponent.spriteFrame = this.getSpriteFrameByName("handleImage"); // 设置柄的图像资源

    return handleNode;

}



// 定义滑块事件处理函数

@ccclass("HelloWorld")

export class HelloWorld extends Component {

    public onSliderProgress(event: Event, customEventData: string) {

        const slider = event.target as Slider;

        console.log("Slider progress: " + slider.progress + " - " + customEventData);

    }

}

滚动事件

  1. Node 添加 Scroll View 组件。

  2. Scroll View 组件添加滚动事件。


// 创建一个 Scroll View 节点

const scrollViewNode = new Node();

scrollViewNode.addComponent(ScrollView);

scrollViewNode.setPosition(0, 0);



// 获取 Scroll View 组件并设置属性

const scrollViewComponent = scrollViewNode.getComponent(ScrollView);

scrollViewComponent.direction = ScrollView.Direction.VERTICAL; // 设置滚动方向为垂直

scrollViewComponent.inertia = true; // 开启惯性滚动

scrollViewComponent.elastic = true; // 开启弹性效果



// 创建内容节点

const contentNode = new Node();

contentNode.addComponent(List); // 使用 List 组件来管理内容

contentNode.setPosition(0, 0);



// 为内容节点添加多个子节点

for (let i = 0; i < 10; i++) {

    const itemNode = new Node();

    itemNode.addComponent(Label);

    itemNode.setPosition(0, i * 100);

    const itemLabel = itemNode.getComponent(Label);

    itemLabel.string = "Item " + (i + 1);

    itemLabel.fontSize = 30;

    itemLabel.color = new Color(0, 0, 0, 255); // 黑色



    contentNode.addChild(itemNode);

}



// 将内容节点添加到 Scroll View 的视图区域

scrollViewComponent.content = contentNode;



// 为 Scroll View 添加滚动事件处理函数

scrollViewNode.on(Node.EventType.TOUCH_MOVE, (event: Event) => {

    console.log("ScrollView scrolling");

});



// 将 Scroll View 节点添加到场景中

this.node.addChild(scrollViewNode);

创建自定义 UI 组件

Cocos Creator 允许开发者创建自定义 UI 组件,以满足特定的游戏需求。自定义组件可以通过继承 Component 类并添加自定义属性和方法来实现。

创建自定义 UI 组件

  1. 创建一个新的 TypeScript 文件,定义自定义组件类。

  2. 在类中添加自定义属性和方法。

  3. 在场景中使用自定义组件。

示例:创建一个自定义进度条组件

// CustomProgressBar.ts

@ccclass("CustomProgressBar")

export class CustomProgressBar extends Component {

    @property({ type: ProgressBar })

    progressBar: ProgressBar = null;



    @property({ type: Label })

    label: Label = null;



    @property({ type: float, min: 0, max: 1 })

    progress: number = 0;



    onLoad() {

        this.updateProgress(this.progress);

    }



    public updateProgress(value: number) {

        this.progress = value;

        this.progressBar.progress = value;

        this.label.string = (value * 100).toFixed(2) + "%";

    }

}

在场景中使用自定义组件
  1. 创建一个 Node,并添加 CustomProgressBar 组件。

  2. 设置自定义组件的属性。


// 创建一个 CustomProgressBar 节点

const customProgressBarNode = new Node();

customProgressBarNode.addComponent(CustomProgressBar);

customProgressBarNode.addComponent(ProgressBar);

customProgressBarNode.addComponent(Label);

customProgressBarNode.setPosition(0, 0);



// 获取 CustomProgressBar 组件并设置属性

const customProgressBarComponent = customProgressBarNode.getComponent(CustomProgressBar);

customProgressBarComponent.progressBar = customProgressBarNode.getComponent(ProgressBar);

customProgressBarComponent.label = customProgressBarNode.getComponent(Label);



// 设置进度条的图像

const barImageNode = new Node();

barImageNode.addComponent(Image);

barImageNode.setPosition(0, 0);

const barImageComponent = barImageNode.getComponent(Image);

barImageComponent.spriteFrame = this.getSpriteFrameByName("barImage"); // 设置进度条的图像资源



// 将图像节点添加到 ProgressBar

customProgressBarComponent.progressBar.progressImage = barImageNode;



// 设置 Label 的属性

customProgressBarComponent.label.fontSize = 30;

customProgressBarComponent.label.color = new Color(0, 0, 0, 255); // 黑色



// 更新进度条

customProgressBarComponent.updateProgress(0.7);



// 将节点添加到场景中

this.node.addChild(customProgressBarNode);

总结

通过以上介绍,我们可以看到 Cocos Creator 的 UI 系统非常强大和灵活。开发者可以利用这些组件和布局方式创建丰富多样的用户界面,并通过事件处理函数实现交互功能。此外,自定义组件的创建也为开发者提供了更多的可能性,可以针对特定需求进行扩展和优化。

希望本节内容能够帮助你更好地理解和使用 Cocos Creator 的 UI 系统,为你的虚拟现实游戏项目增添更多的互动性和视觉效果。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值