# 元素系统 PE引擎提供了丰富的内置元素类型,让你能够快速创建各种UI组件和视觉元素。元素是构成PE应用界面的基本单位。 ## 元素类型概览 PE引擎目前支持以下几种内置元素类型: 1. **Sprite(精灵)** - 用于显示图像或创建基本图形 2. **Box(盒子)** - 用于创建矩形区域 3. **Text(文本)** - 用于显示文本内容 4. **HTML** - 用于嵌入原生HTML内容 5. **SVG** - 用于创建矢量图形 ## 创建元素 在PE中,所有元素都通过应用实例的`create`方法创建: ```javascript // 通用创建方法 const element = game.create(type, options) ``` ### Sprite(精灵) Sprite是最常用的元素类型,可以用来显示图像或创建基本图形。 ```javascript // 创建一个默认的sprite const sprite = game.create('sprite') // 创建带配置的sprite const spriteWithConfig = game.create('sprite', { x: 100, y: 100, width: 50, height: 50 }) // 设置位置和尺寸 sprite.setPosition(200, 200) sprite.setSize(100, 100) // 添加样式 sprite.element.style.backgroundColor = '#3498db' sprite.element.style.borderRadius = '50%' ``` ### Box(盒子) Box元素用于创建矩形区域,常用于创建按钮、面板等UI组件。 ```javascript // 创建一个box const box = game.create('box', { x: 100, y: 100, width: 200, height: 100 }) // Box元素的DOM元素可以直接操作样式 box.element.style.backgroundColor = '#e74c3c' box.element.style.borderRadius = '8px' ``` ### Text(文本) Text元素用于显示文本内容。 ```javascript // 创建文本元素 const text = game.create('text', { text: 'Hello PE!', x: 100, y: 100 }) // 更新文本内容 text.setText('新的文本内容') // 设置文本样式 text.element.style.color = '#ffffff' text.element.style.fontSize = '24px' text.element.style.fontWeight = 'bold' ``` ### HTML元素 HTML元素允许你嵌入原生HTML内容。 ```javascript // 创建HTML元素 const htmlElement = game.create('html', { html: '
这是HTML内容
', x: 100, y: 100 }) // 更新HTML内容 htmlElement.setHtml('
更新的内容
') ``` ### SVG元素 SVG元素用于创建矢量图形。 ```javascript // 创建SVG元素 const svgElement = game.create('svg', { x: 100, y: 100, width: 200, height: 200, content: '' }) ``` ## 元素的通用方法和属性 所有PE元素都有一些通用的方法和属性: ### 位置和尺寸 ```javascript // 设置位置 element.setPosition(100, 200) // 设置尺寸 element.setSize(300, 150) // 获取位置 const x = element.getX() const y = element.getY() // 获取尺寸 const width = element.getWidth() const height = element.getHeight() ``` ### 样式操作 ```javascript // 设置单个样式属性 element.setStyle('backgroundColor', '#3498db') // 设置多个样式属性 element.setStyles({ backgroundColor: '#3498db', borderRadius: '8px', border: '2px solid #2980b9' }) // 添加CSS类 element.addClass('my-class') // 移除CSS类 element.removeClass('my-class') // 检查是否包含CSS类 if (element.hasClass('my-class')) { // 执行相应操作 } ``` ### 显示和隐藏 ```javascript // 隐藏元素 element.hide() // 显示元素 element.show() // 切换显示状态 element.toggle() ``` ## 在场景模板中使用元素 在PE的场景系统中,你也可以直接在模板中定义元素: ```html 面板内容 欢迎使用PE引擎 {{ item.label }} ``` 对应的样式文件(.less): ```less .player { background-color: #3498db; border-radius: 50%; transition: all 0.3s ease; } .player:hover { transform: scale(1.1); } .panel { background-color: #ecf0f1; border: 2px solid #bdc3c7; border-radius: 8px; display: flex; align-items: center; justify-content: center; } .title { color: #2c3e50; font-size: 24px; font-weight: bold; } .menu-item { width: 150px; height: 40px; background-color: #e74c3c; color: white; display: flex; align-items: center; justify-content: center; border-radius: 4px; cursor: pointer; margin: 5px 0; } ``` ## 元素的事件处理 PE元素支持丰富的事件处理: ```javascript // 添加点击事件 element.element.addEventListener('click', (event) => { console.log('元素被点击了') }) // 添加鼠标移入事件 element.element.addEventListener('mouseenter', (event) => { element.setStyle('backgroundColor', '#e74c3c') }) // 添加鼠标移出事件 element.element.addEventListener('mouseleave', (event) => { element.setStyle('backgroundColor', '#3498db') }) // 在场景模板中直接绑定事件 // 点击我 ``` ## 自定义元素 除了内置元素,你还可以创建自定义元素: ```javascript // 创建自定义元素类 class CustomElement extends BaseElement { constructor(x, y, width, height, engineId) { super(x, y, width, height, engineId) // 初始化自定义元素 this.element.style.backgroundColor = '#9b59b6' this.element.style.borderRadius = '10px' } // 自定义方法 animateColor() { const colors = ['#9b59b6', '#3498db', '#e74c3c', '#2ecc71'] let index = 0 setInterval(() => { this.element.style.backgroundColor = colors[index % colors.length] index++ }, 1000) } } // 注册自定义元素 // 在场景中使用 // ``` 通过以上内容,你已经了解了PE引擎的元素系统。在下一章节中,我们将深入探讨场景系统的使用。