简单随机地穴示例

This commit is contained in:
ruanwujing 2024-02-02 11:47:09 +08:00
parent c9a7906dfd
commit 87d7bbf3b8
13 changed files with 1673 additions and 7 deletions

View File

@ -484,6 +484,29 @@
"_isUnderline": false, "_isUnderline": false,
"_underlineHeight": 2, "_underlineHeight": 2,
"_cacheMode": 0, "_cacheMode": 0,
"_enableOutline": false,
"_outlineColor": {
"__type__": "cc.Color",
"r": 0,
"g": 0,
"b": 0,
"a": 255
},
"_outlineWidth": 2,
"_enableShadow": false,
"_shadowColor": {
"__type__": "cc.Color",
"r": 0,
"g": 0,
"b": 0,
"a": 255
},
"_shadowOffset": {
"__type__": "cc.Vec2",
"x": 2,
"y": 2
},
"_shadowBlur": 2,
"_id": "49Mt6u3ylAhIjwUjPL/7hO" "_id": "49Mt6u3ylAhIjwUjPL/7hO"
}, },
{ {
@ -728,6 +751,29 @@
"_isUnderline": false, "_isUnderline": false,
"_underlineHeight": 2, "_underlineHeight": 2,
"_cacheMode": 0, "_cacheMode": 0,
"_enableOutline": false,
"_outlineColor": {
"__type__": "cc.Color",
"r": 0,
"g": 0,
"b": 0,
"a": 255
},
"_outlineWidth": 2,
"_enableShadow": false,
"_shadowColor": {
"__type__": "cc.Color",
"r": 0,
"g": 0,
"b": 0,
"a": 255
},
"_shadowOffset": {
"__type__": "cc.Vec2",
"x": 2,
"y": 2
},
"_shadowBlur": 2,
"_id": "28WdAu1Z5MH72mVIZBx9Zf" "_id": "28WdAu1Z5MH72mVIZBx9Zf"
}, },
{ {
@ -972,6 +1018,29 @@
"_isUnderline": false, "_isUnderline": false,
"_underlineHeight": 2, "_underlineHeight": 2,
"_cacheMode": 0, "_cacheMode": 0,
"_enableOutline": false,
"_outlineColor": {
"__type__": "cc.Color",
"r": 0,
"g": 0,
"b": 0,
"a": 255
},
"_outlineWidth": 2,
"_enableShadow": false,
"_shadowColor": {
"__type__": "cc.Color",
"r": 0,
"g": 0,
"b": 0,
"a": 255
},
"_shadowOffset": {
"__type__": "cc.Vec2",
"x": 2,
"y": 2
},
"_shadowBlur": 2,
"_id": "3788BizyZKEKxXNzRYnqkE" "_id": "3788BizyZKEKxXNzRYnqkE"
}, },
{ {
@ -1219,6 +1288,29 @@
"_isUnderline": false, "_isUnderline": false,
"_underlineHeight": 2, "_underlineHeight": 2,
"_cacheMode": 0, "_cacheMode": 0,
"_enableOutline": false,
"_outlineColor": {
"__type__": "cc.Color",
"r": 0,
"g": 0,
"b": 0,
"a": 255
},
"_outlineWidth": 2,
"_enableShadow": false,
"_shadowColor": {
"__type__": "cc.Color",
"r": 0,
"g": 0,
"b": 0,
"a": 255
},
"_shadowOffset": {
"__type__": "cc.Vec2",
"x": 2,
"y": 2
},
"_shadowBlur": 2,
"_id": "adiMFX1khPFoPqgS1WlUy4" "_id": "adiMFX1khPFoPqgS1WlUy4"
}, },
{ {
@ -1475,6 +1567,29 @@
"_isUnderline": false, "_isUnderline": false,
"_underlineHeight": 2, "_underlineHeight": 2,
"_cacheMode": 0, "_cacheMode": 0,
"_enableOutline": false,
"_outlineColor": {
"__type__": "cc.Color",
"r": 0,
"g": 0,
"b": 0,
"a": 255
},
"_outlineWidth": 2,
"_enableShadow": false,
"_shadowColor": {
"__type__": "cc.Color",
"r": 0,
"g": 0,
"b": 0,
"a": 255
},
"_shadowOffset": {
"__type__": "cc.Vec2",
"x": 2,
"y": 2
},
"_shadowBlur": 2,
"_id": "46OSFJAOlLa5icud6LYf4t" "_id": "46OSFJAOlLa5icud6LYf4t"
}, },
{ {
@ -2057,6 +2172,7 @@
"z": 0 "z": 0
}, },
"_distance": 0, "_distance": 0,
"_planeBias": 1,
"_shadowColor": { "_shadowColor": {
"__type__": "cc.Color", "__type__": "cc.Color",
"r": 76, "r": 76,

View File

@ -1,5 +1,5 @@
{ {
"ver": "1.1.49", "ver": "1.1.50",
"importer": "scene", "importer": "scene",
"imported": true, "imported": true,
"uuid": "3fd7ab19-8a50-470c-8dc7-0cd664f0fb5b", "uuid": "3fd7ab19-8a50-470c-8dc7-0cd664f0fb5b",

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,11 @@
{
"ver": "1.1.50",
"importer": "scene",
"imported": true,
"uuid": "310fd3ed-a1d3-4adb-8766-8b82bb6508c1",
"files": [
".json"
],
"subMetas": {},
"userData": {}
}

View File

@ -1,5 +1,5 @@
{ {
"ver": "1.1.49", "ver": "1.1.50",
"importer": "scene", "importer": "scene",
"imported": true, "imported": true,
"uuid": "64bd0402-59ce-4670-ae7d-24b450f09bb9", "uuid": "64bd0402-59ce-4670-ae7d-24b450f09bb9",

View File

@ -1,5 +1,5 @@
{ {
"ver": "1.1.49", "ver": "1.1.50",
"importer": "scene", "importer": "scene",
"imported": true, "imported": true,
"uuid": "2d052f05-f3ae-4ade-a629-7dc0680a169b", "uuid": "2d052f05-f3ae-4ade-a629-7dc0680a169b",

View File

@ -1,5 +1,5 @@
{ {
"ver": "1.1.49", "ver": "1.1.50",
"importer": "scene", "importer": "scene",
"imported": true, "imported": true,
"uuid": "d3d4c22a-8da8-4e57-94c4-1cfa29c09130", "uuid": "d3d4c22a-8da8-4e57-94c4-1cfa29c09130",

View File

@ -26,10 +26,10 @@ export enum EasingString {
} }
@ccclass('GPDrag') @ccclass('GPDrag')
export class GPDrag extends Component { export class GPDrag extends Component {
@property({type:CCBoolean, tooltip:"触碰点偏移量敏感"}) @property({tooltip:"触碰点偏移量敏感"})
public touchOffsetSensitive = true public touchOffsetSensitive = true
@property({type:CCBoolean, tooltip:"失败时回到起始位置"}) @property({tooltip:"失败时回到起始位置"})
public backHomeWhenFailed = true public backHomeWhenFailed = true
@property({type:Enum(DragBackHomeType), tooltip:"回家的方式", visible:function(this){ @property({type:Enum(DragBackHomeType), tooltip:"回家的方式", visible:function(this){
@ -56,7 +56,7 @@ export class GPDrag extends Component {
}}) }})
public topLayerNode:Node public topLayerNode:Node
@property({type:CCBoolean, tooltip:"松开后返回原来的层级", visible:function(){ @property({tooltip:"松开后返回原来的层级", visible:function(){
return this.floatType != FloatType.None return this.floatType != FloatType.None
}}) }})
public backToOriZ = true; public backToOriZ = true;

View File

@ -0,0 +1,9 @@
{
"ver": "1.2.0",
"importer": "directory",
"imported": true,
"uuid": "a7782b29-017e-412b-9975-3e3c4adc9caa",
"files": [],
"subMetas": {},
"userData": {}
}

View File

@ -0,0 +1,48 @@
import { _decorator, Component, Node } from 'cc';
const { ccclass, property } = _decorator;
export class RandomCaveGenerator {
public columns = 30
public rows = 35
public data:boolean[] = []
private cache:boolean[] = []
public initRate = 0.5;
public init() {
for (let i = 0; i < this.columns * this.rows; i++) {
this.data[i] = Math.random() < this.initRate;
}
}
public isWall(c: number, r: number) {
let idx = c + r * this.columns
if (idx < 0 || idx >= this.columns * this.rows)
return true
return this.data[idx]
}
public count(c: number, r: number, n: number) {
let count = 0;
for (let i = -n; i <= n; i++) {
for (let j = -n; j <= n; j++) {
if (this.isWall(c + i, r + j)) {
count++
}
}
}
return count
}
public setCache(c:number, r:number, b:boolean) {
this.cache[c + r * this.columns] = b;
}
public step() {
for (let c = 0; c < this.columns; c++) {
for (let r = 0; r < this.rows; r++) {
let count = this.count(c, r, 1)
let count2 = this.count(c, r, 2)
this.setCache(c, r, count >= 5 || count2 <= 2)
}
}
this.data = Array.from(this.cache)
}
}

View File

@ -0,0 +1,9 @@
{
"ver": "4.0.23",
"importer": "typescript",
"imported": true,
"uuid": "e4eccc10-5bc2-4921-9ab7-69896f59e3bf",
"files": [],
"subMetas": {},
"userData": {}
}

View File

@ -0,0 +1,49 @@
import { _decorator, Color, Component, instantiate, Node, Sprite, v3 } from 'cc';
import { RandomCaveGenerator } from './RandomCaveGenerator';
const { ccclass, property } = _decorator;
@ccclass('randomCaveExample')
export class randomCaveExample extends Component {
@property({type:Node})
public cell:Node
private generator = new RandomCaveGenerator()
private nodes:Node[] = []
start() {
this.generator.init();
let startX = -this.generator.columns / 2 * 10
let startY = -this.generator.rows / 2 * 10
for (let i = 0; i < this.generator.columns; i++) {
for (let j = 0; j < this.generator.rows; j++) {
let node = instantiate(this.cell);
this.node.addChild(node)
node.setPosition(v3(i * 10 + startX, j * 10 + startY, 0))
if (this.generator.isWall(i, j))
node.getComponent(Sprite).color = Color.GRAY
this.nodes[i + j * this.generator.rows] = node;
}
}
}
public randomInit() {
this.generator.init();
this.apply()
}
public step() {
this.generator.step();
this.apply()
}
private apply() {
let startX = -this.generator.columns / 2 * 10
let startY = -this.generator.rows / 2 * 10
for (let i = 0; i < this.generator.columns; i++) {
for (let j = 0; j < this.generator.rows; j++) {
let node = this.nodes[i + j * this.generator.rows]
node.setPosition(v3(i * 10 + startX, j * 10 + startY, 0))
node.getComponent(Sprite).color = this.generator.isWall(i, j) ? Color.GRAY: Color.WHITE
}
}
}
}

View File

@ -0,0 +1,9 @@
{
"ver": "4.0.23",
"importer": "typescript",
"imported": true,
"uuid": "4a0c2960-68a9-4277-a862-a94646e58a34",
"files": [],
"subMetas": {},
"userData": {}
}