实战编程·刻在男人DNA里的浪漫,空气投篮(二)(3)

简介: 实战编程·刻在男人DNA里的浪漫,空气投篮(二)

游戏中视图

在游戏回合视图展示后,用户会进入到“游戏中”视图,正式开始参与游戏。如下图所示:

image.png

空气投篮游戏的游戏视图很简答,还原在现实生活中的篮筐,由一个计分板和投篮的篮筐组成,而计分板分为两块,分别为个位数计分板和十位数计分板。

我们首先要导入“篮筐”的图片,同样是在黑色背景下,我们需要一张SVG格式的矢量图,如下图所示:

image.png

回到GameDetailView游戏详情页,我们来构建游戏中视图的样式,由于需要统计计分板的分数,因此需要声明好变量部分,如下代码所示:


@State var unitsDigit: Int = 0
@State var tensDigit: Int = 0

上述代码中,unitsDigit为计分板个位数,tensDigit为计分板十位数。然后,我们再构建样式部分,如下代码所示:

// 游戏页面
func playGameView() -> some View {
  VStack(alignment: .center, spacing: 40) {
      HStack(alignment: .center, spacing: 20) {
        Text(String(unitsDigit))
        .font(.system(size: 120))
        .bold()
        .foregroundColor(.white)
        .padding(40)
        .background(Color.gray)
        .cornerRadius(8)
        Text(String(tensDigit))
        .font(.system(size: 120))
        .bold()
        .foregroundColor(.white)
        .padding(40)
        .background(Color.gray)
        .cornerRadius(8)
      }
      Image("ball")
      .resizable()
      .aspectRatio(contentMode: .fit)
      .frame(maxWidth: UIScreen.main.bounds.size.width / 2)
    }
}

image.png

上述代码,在playGameView视图中,我们使用HStack横向布局容器包裹了计分板的样式内容。

关于Text文字背景部分,SwiftUI提供的方法是使用padding撑开距离,再使用background背景颜色填充撑开的间距,最后再使用cornerRadius设置圆角。

如此,便实现了计分板的样式效果,图片部分这里就不多说了。

同样,前期什么的Int类型的参数,在Text文字组件中使用需要转换成String字符串类型,方可使用。

此时我们就完成了2个页面:preStartView游戏回合视图、playGameView游戏中视图。这里做页面的切换,我们也可以声明一个参数来进行状态的切换,如下代码所示:

@State var isReady:Bool = false

然后通过声明好的isReady参数进行页面间的切换,如下代码所示:

if isReady {
  playGameView()
} else {
  preStartView()
}

image.png

进入&返回

经过两个章节的学习,我们完成了两个主要的视图:ContentView首页视图、GameDetailView游戏详情视图,共4个页面,接下来,我们要将这4个页面串起来。

回到ContentView首页视图,我们盘一盘逻辑,在用户点击游戏项时,将会进入到GameDetailView游戏详情视图,游戏详情页首先会展示回合视图,然后再开始游戏。

了解了基本的交互逻辑后,我们先完成页面之间的跳转,这里可以使用基于NavigationView顶部导航栏的跳转方式,如下代码所示:

NavigationView {
  ZStack {
    Color(.black).edgesIgnoringSafeArea(.all)
    if isAffirmInWatch {
          gameListView()
        } else {
          prepareView()
          .onTapGesture {
            self.isAffirmInWatch = true
          }
        }
  }
}

上述代码中,需要使用NavigationView将整个视图包裹起来,然后再在gameListView游戏列表视图中添加跳转方法,如下代码所示:

NavigationLink(destination: GameDetailView()) {
  gameRowView(gameName: "投篮", gameHelpText: "手举球开始游戏", gameImage: "basketball")
}

image.png


相关文章
|
存储 Go iOS开发
实战编程·刻在男人DNA里的浪漫,空气投篮(二)(2)
实战编程·刻在男人DNA里的浪漫,空气投篮(二)
72 1
|
存储
实战编程·刻在男人DNA里的浪漫,空气投篮(二)(1)
实战编程·刻在男人DNA里的浪漫,空气投篮(二)
67 1
|
传感器 前端开发 iOS开发
实战编程·刻在男人DNA里的浪漫,空气投篮(二)(4)
实战编程·刻在男人DNA里的浪漫,空气投篮(二)
75 1
|
安全 iOS开发 UED
实战编程·刻在男人DNA里的浪漫,空气投篮(一)
实战编程·刻在男人DNA里的浪漫,空气投篮(一)
106 0
|
Perl 定位技术
家里蹲大学数学杂志第7卷第481期一道实分析题目参考解答
(1) Define what it means for a set $A\subset \bbR^2$ to have zero content. (2) Prove the following result: Let $g:[a,b]\to\bbR$ be bounded and integrable.
648 0
|
Perl 关系型数据库 RDS
[家里蹲大学数学杂志]第418期南开大学2013年实变函数期末考试试题参考解答
  1. 设 $A$ 为非可数的实数集合. 证明: 存在整数 $n$ 使得 $A\cap [n,n+1]$ 为可数集. ($15'$)   证明: 用反证法. 若 $$\bex A\cap [n,n+1]\mbox{ 可数,}\quad \forall\ n\in\bbZ.
1143 0
|
关系型数据库 RDS Perl
[家里蹲大学数学杂志]第388期一套泛函分析期末试题参考解答
  1. ($20$ 分) 证明非线性积分方程 $$\bex x(t)+\lm \int_a^b K(t,s,x(s))\rd s=y(t),\quad \forall\ t\in [a,b] \eex$$ 在 $|\lm|$ 足够小时有唯一连续解.
1062 0
|
资源调度 Perl
[家里蹲大学数学杂志]第328期詹兴致矩阵论习题参考解答
说明:  1. 大部分是自己做的, 少部分是参考文献做的, 还有几个直接给出参考文献. 2. 如果您有啥好的想法, 好的解答, 热切地欢迎您告知我, 或者在相应的习题解答网页上回复. 哪里有错误, 也盼望您指出.
1373 0
|
关系型数据库 Perl RDS
[家里蹲大学数学杂志]第322期赣南师范学院数学竞赛培训第11套模拟试卷
  数学分析部分     1. 已知函数 $f(x)=\ln x-ax$, 其中 $a$ 为常数. 如果 $f(x)$ 有两个零点 $x_1,x_2$. 试证: $x_1x_2>e^2$.
695 0
|
关系型数据库 RDS
[再寄小读者之数学篇](2014-10-09 家里蹲大学数学杂志第310期第7题第1小题修正)
当 $x>0$ 时, 由 $$\beex \bea \int_0^\infty e^{-x\sex{t+\frac{1}{t}}}\rd t &\leq \int_0^1 e^{-\frac{x}{t}}\rd t +\int_1^\infty e^{-xt}\rd t\\ &=\int_1^\in...
693 0