首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么这个精灵在0,0产卵,当我在它产生的时候改变它?

为什么这个精灵在0,0产卵,当我在它产生的时候改变它?
EN

Stack Overflow用户
提问于 2021-10-30 18:07:58
回答 1查看 281关注 0票数 0

我在戈多做一个采矿游戏。

我的问题是,翡翠脉处于0,0的位置,但我在产卵脚本中改变了它。我需要得到在种子中使用它的全局位置,这样我就可以得到一个1或0的值来得到一个石头或翡翠块。因为它是0,0,每个块加载如下所示:图像

代码语言:javascript
复制
var rand = round(abs(chunksettings.noise.get_noise_2d(self.global_position.x + (x * offset),self.global_position.y + (y * offset)))*3)

后来我有矿脉要装成块状。这些矿脉在其内部形成块状。

这个场景在主场景中得到了体现。以下是主要场景的代码:

代码语言:javascript
复制
extends Node2D


#offset between chunks
var offset = 48

#preloading chunk settings
export var load_x = 20
export var load_y = 20

#all the veins to spawn
var stone_vein = preload("res://Scenes/veins/Stone vein.tscn")
var emerald_vein = preload("res://Scenes/veins/Emerald vein.tscn")

func _ready():
    for x in load_x:
        
        for y in load_y:
            var emerald_vein_inst = emerald_vein.instance()
            add_child(emerald_vein_inst)
            emerald_vein_inst.position2d.global_position.x = x * offset
            emerald_vein_inst.position2d.global_position.y = y * offset
            emerald_vein_inst.global_position.x = x * offset
            emerald_vein_inst.global_position.y = y * offset

func getrandomnumber():
    pass

以下是开采矿脉的代码:

代码语言:javascript
复制
extends Node2D

onready var selfnoise = OpenSimplexNoise.new()
onready var chunksettings = $"/root/ChunkSettings"
onready var position2d = $Position2D
var emerald_block = preload("res://Scenes/Blocks/Emerald block.tscn")
var stone_block = preload("res://Scenes/Blocks/Stone_Block.tscn")
var offset = 16
var rng = RandomNumberGenerator.new()

func _ready():
    selfnoise.seed = chunksettings.noise.seed
    selfnoise.octaves = chunksettings.noise.octaves
    selfnoise.persistence = chunksettings.noise.persistence
    selfnoise.lacunarity = chunksettings.noise.lacunarity
    gen_vein()
    
func gen_vein():
    for x in 3:
        for y in 3:
            var inst_stone = stone_block.instance()
            var inst_emerald = emerald_block.instance()
            var inst = inst_stone
            var rand = round(abs(chunksettings.noise.get_noise_2d(self.global_position.x + (x * offset),self.global_position.y + (y * offset)))*3)
            print(rand)
            if rand == 1:
                inst = inst_emerald
            elif rand == 0:
                inst = inst_stone
            print(self.global_position)
            add_child(inst)
            inst.position.x = offset * x
            inst.position.y = offset * y
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-10-30 18:23:09

我更改了代码的一部分并使其工作起来。当它生成节点时,它运行节点脚本,然后更改其位置。所以,我改变了它产生的顺序。

代码语言:javascript
复制
func _ready():
    for x in load_x:
        
        for y in load_y:
            var emerald_vein_inst = emerald_vein.instance()
            emerald_vein_inst.global_position.x = x * offset
            emerald_vein_inst.global_position.y = y * offset
            add_child(emerald_vein_inst)

而不是:

代码语言:javascript
复制
func _ready():
    for x in load_x:
        
        for y in load_y:
            var emerald_vein_inst = emerald_vein.instance()
            add_child(emerald_vein_inst)
            emerald_vein_inst.position2d.global_position.x = x * offset
            emerald_vein_inst.position2d.global_position.y = y * offset
            emerald_vein_inst.global_position.x = x * offset
            emerald_vein_inst.global_position.y = y * offset

Reddit上有人帮了我(详细信息)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69780877

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档