【问题标题】:Building a Pyramid of Circles - SwiftUI构建圆形金字塔 - SwiftUI
【发布时间】:2021-12-15 16:20:22
【问题描述】:

我正在寻找使用 SpriteKit 和 SwiftUI 绘制圆形金字塔,如下图所示

  o
 o o
o o o

我正在使用下面的一组循环来尝试生成它们,但是我遇到了两个问题。首先,我希望它以相反的方式出现,在我的脑海中它是颠倒的。

我还想在每个圆圈之间添加特定的间距,而不是让它们触及每个级别;因此在顶部的间隔变量。

let spacer: Int = 40

for i in 0...7 {
    for j in 0...i {

        let x = Int(W) - ((i * radius) + radius) + (j * diameter)
        let y = ((i * radius * 2) - radius) + side

        addNode(posX: Double(x), posY: Double(y))
    }
}
  • addNode(posX, posY) 只是在提供的两个坐标处创建一个圆

有人对如何修正公式有任何想法吗?

【问题讨论】:

  • 你不需要精灵! SwiftUI 运行良好
  • @swiftPunk 我在游戏中使用节点作为对象,这得益于物理体,所以据我所知 SwiftUI 不起作用?

标签: swift swiftui sprite-kit


【解决方案1】:

这是您正在尝试的示例,但我没有使用 sprite!

struct ContentView: View {
    
    @State private var heightOfPyramid: Int = 3
    @State private var spacing: CGFloat = 10.0
    @State private var sizeOfCircle: CGFloat = 25.0

    var body: some View {
        
        Spacer()
        
        VStack(spacing: spacing) {

            ForEach(0...heightOfPyramid, id:\.self) { outSideIndex in
                
                HStack(spacing: spacing) {

                    ForEach(0..<outSideIndex, id:\.self) { index in
                        
                        Circle()
                            .frame(width: sizeOfCircle, height: sizeOfCircle)
                        
                    }

                }
                
            }
            
        }
        .animation(Animation.interactiveSpring(), value: heightOfPyramid)
        .shadow(radius: 10.0)
        
        Spacer()
        
        VStack {
            
            HStack {
                Text("heightOfPyramid:")
                Slider(value: Binding(get: { return Double(heightOfPyramid) }, set: { newValue in heightOfPyramid = Int(newValue) }), in: 0.0...10.0)
            }
            
            HStack {
                Text("sizeOfCircle:")
                Slider(value: $sizeOfCircle, in: 0.0...50.0)
            }
            
            HStack {
                Text("spacing:")
                Slider(value: $spacing, in: 0.0...50.0)
            }
            
            
        }
        .padding()

    }
    
}

【讨论】:

  • 如果我不需要上面评论中提到的圆圈的物理体,这会很好
  • 可以实现了!我个人直到现在才使用 sprite! PS:如果你打算使用 SwiftUI 作为绘图工具!我的答案是给你的,如果你正在绘制精灵并且你想在 SwiftUI 中使用它,那么情况就不同了。对我来说有点不清楚你需要什么!如果您使用精灵,那么您可以绘制我所做的事情。
猜你喜欢
  • 1970-01-01
  • 2019-05-22
  • 1970-01-01
  • 1970-01-01
  • 2020-02-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多