UI系统
在虚拟现实游戏中,用户界面(UI)是玩家与游戏互动的重要途径。Cocos Creator 提供了强大的 UI 系统,可以帮助开发者创建丰富多样的界面元素。本节将详细介绍 Cocos Creator 的 UI 系统,包括常见的 UI 组件、布局方式、交互事件处理以及如何创建自定义 UI 组件。
常见的 UI 组件
Cocos Creator 中提供了多种常见的 UI 组件,这些组件可以满足大多数游戏界面的需求。以下是一些常用的 UI 组件及其基本用法:
Label
Label 组件用于显示文本。它支持多种文本样式,如字体、颜色、对齐方式等。
创建和使用 Label
-
在场景中创建一个
Node,然后添加Label组件。 -
设置
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
-
在场景中创建一个
Node,然后添加Button组件。 -
设置
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 {
@cctype(Button)
@ccproperty
public button: Button = null;
public onButtonClick(event: Event, customEventData: string) {
console.log("Button clicked: " + customEventData);
}
}
Image
Image 组件用于在界面上显示图像。它可以用于显示静态图像或动态图像(如精灵图集)。
创建和使用 Image
-
在场景中创建一个
Node,然后添加Image组件。 -
设置
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
-
在场景中创建一个
Node,然后添加Scroll View组件。 -
设置
Scroll View组件的属性,如滚动方向、滚动速度等。 -
为
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
-
在场景中创建一个
Node,然后添加ListView组件。 -
设置
ListView组件的属性,如滚动方向、每个项目的大小等。 -
为
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
-
在场景中创建一个
Node,然后添加Slider组件。 -
设置
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 {
@cctype(Slider)
@ccproperty
public slider: Slider = null;
public onSliderProgress(event: Event, customEventData: string) {
console.log("Slider progress: " + this.slider.progress + " - " + customEventData);
}
}
Toggle
Toggle 组件用于创建开关按钮,常用于设置游戏选项。
创建和使用 Toggle
-
在场景中创建一个
Node,然后添加Toggle组件。 -
设置
Toggle组件的属性,如开关的图像、初始状态等。 -
为开关添加事件处理函数。
// 创建一个 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
-
在场景中创建一个
Node,然后添加ProgressBar组件。 -
设置
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
-
在场景中创建一个
Node,然后添加TextField组件。 -
设置
TextField组件的属性,如字体、输入类型等。 -
为文本框添加输入事件处理函数。
// 创建一个 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
-
在场景中创建一个
Node,然后添加Horizontal Layout组件。 -
为布局节点添加多个子节点,并设置子节点的属性。
// 创建一个 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
-
在场景中创建一个
Node,然后添加Vertical Layout组件。 -
为布局节点添加多个子节点,并设置子节点的属性。
// 创建一个 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
-
在场景中创建一个
Node,然后添加Grid Layout组件。 -
为布局节点添加多个子节点,并设置子节点的属性。
// 创建一个 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
-
在场景中创建一个
Node,然后添加Content Size Fitter组件。 -
为布局节点添加多个子节点,并设置子节点的属性。
// 创建一个 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 Group、Vertical Layout Group 和 Grid Layout Group。
创建和使用 Layout Group
-
在场景中创建一个
Node,然后添加Layout Group组件。 -
为布局节点添加多个子节点,并设置子节点的属性。
// 创建一个 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 的关键。常见的交互事件包括点击、拖动、滚动等。以下是一些处理交互事件的方法:
点击事件
-
为
Node添加Button组件。 -
为
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);
}
}
滑动事件
-
为
Node添加Slider组件。 -
为
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);
}
}
滚动事件
-
为
Node添加Scroll View组件。 -
为
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 组件
-
创建一个新的 TypeScript 文件,定义自定义组件类。
-
在类中添加自定义属性和方法。
-
在场景中使用自定义组件。
示例:创建一个自定义进度条组件
// 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) + "%";
}
}
在场景中使用自定义组件
-
创建一个
Node,并添加CustomProgressBar组件。 -
设置自定义组件的属性。
// 创建一个 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 系统,为你的虚拟现实游戏项目增添更多的互动性和视觉效果。


.UI系统&spm=1001.2101.3001.5002&articleId=147494490&d=1&t=3&u=4a16b870845c4e48a6adea36e83781b8)
1379

被折叠的 条评论
为什么被折叠?



