首页 > 其他分享 >鸿蒙开发游戏(一)---大鱼吃小鱼(界面部署)

鸿蒙开发游戏(一)---大鱼吃小鱼(界面部署)

时间:2024-02-01 17:13:57浏览次数:29  
标签:20 游戏 鸿蒙 大鱼吃小鱼 Component ---

鸿蒙开发游戏(一)---大鱼吃小鱼(界面部署)

鸿蒙开发游戏(二)---大鱼吃小鱼(摇杆控制)

鸿蒙开发游戏(三)---大鱼吃小鱼(放置NPC)

鸿蒙开发游戏(四)---大鱼吃小鱼(互吃升级)

鸿蒙开发游戏(五)---大鱼吃小鱼(添加音效)

鸿蒙开发游戏(六)---大鱼吃小鱼(称霸海洋)

 

前言:你是否玩过古老而不失优雅的大鱼吃小鱼,小鱼的生存之路何尝不是我们这些打工人的写照,以前想用安卓写的,碰巧鸿蒙它来了,那就边学习边记录吧,这个游戏一共分为6篇,记录了鸿蒙App的第一步创建,申明式UI控件如何使用,简单动画的使用,方法的封装,变量的状态管理,点击事件的分发,页面的生命周期,钩子的使用,一些用法与安卓原生的对比等,也算是一个小完整的项目了。

第一篇相对简单,只是简单的布局摆放,用的知识点是Stack布局,State状态管理,Entry入口,Component注解等

1、创建项目

2、项目结构

3、布局搭建

4、代码编写

 

1、创建项目

一般选择一个空的Ability

我们填写对应的项目名称,Bundle其实相当于安卓的包名,记得IOS也叫Bundle Name,就是唯一的标识。这里选择Api9,因为Api7以前还能使用Java编写,8还可以使用Js编写,到9以后就只能使用ArkTs了,这是官方对ts的一个升级。模型选择Stage,因为Api8以前只有FA模型,这两个模型的区别可以去官方看看,目前你只需要知道用Stage就对了,主推也是Stage模型。

Finish完成

2、项目目录

到这你会发现,系统帮我们创建了entry目录,有一个EntryAbility.ts和Index.ets。

这两个是有关联的,EntryAbility会加载一个主页面作为入口,就是Index.ets,当然你后期新创建了其他ets文件也可以修改。需要注意的是必须要有@Entry和@Component修饰

  • @Entry:作为入口显示
  • @Component:作为组件显示,如我们封装一个通用的TitleView,就只需要此修饰即可。

需要注意的是系统给我们创建了Index.et,会默认给我添加到配置文件中,如果自己创建,需要在这里添加,相当于安卓里的配置文件添加Activity。

3、布局搭建

我们需要2张图,一张小鱼,一张背景图(当然也可以gif,后面的海带飘飘)

放在media目录下,

4、编写代码

@Entry
@Component
export struct FishPage {
    
  build() {

  }
}

这是新的一个文件,我取名叫FishPage,我们写的UI 就在build里写,当然这里还有其他的生命周期的方法,这里暂时没用到,后面会一一介绍。

竟然需要背景,那就首选层叠布局Stack

@Entry
@Component
export struct FishPage {
  //方向
  @State angle: number = 0
  //其实位置
  @State xFish: number = 100
  @State yFish: number = 100

  build() {
    Row() {
      Stack() {
        // 背景
        Image($r("app.media.bg_fish"))

        Image($r("app.media.icon_fish_right"))
          .position({ x: this.xFish - 20, y: this.yFish - 20 })
          .rotate({ angle: this.angle, centerX: '50%', centerY: '50%' })
          .width(40)
          .height(40)


        Row() {
          Button('←')
            .onClick(() => {
              this.xFish -= 20
            })
          Column({ space: 40 }) {
            Button('↑')
              .onClick(()=>{
                this.yFish -= 20
              })
            Button('↓')
              .onClick(()=>{
                this.yFish += 20
              })
          }

          Button('→')
            .onClick(()=>{
              this.xFish += 20
            })
        }
        .position({ x: 50, y: 200 })
      }
    }
  }
}

这里需要注意一点就是

Image($r("app.media.bg_fish"))

安卓中是R.drawable.xxx,这里是$r

生命式UI组件的用法这里就不解答了,参考文档很详细

 

第一篇完

 

标签:20,游戏,鸿蒙,大鱼吃小鱼,Component,---
From: https://www.cnblogs.com/cmusketeer/p/18001520

相关文章

  • pandas - isin()函数 是一个pandas.Series和pandas.DataFrame的方法,用于检查每个元素
    matched_rows=df[~df['设备IMEI'].isin(b_df['设备IMEI'])]这段代码的作用是从DataFramedf中筛选出不在另一个DataFrameb_df的"设备IMEI"列中的值。df['设备IMEI']表示在DataFramedf中获取"设备IMEI"列的序列。b_df['设备IMEI']表示在DataFrameb_df......
  • 【C++】力扣101-分配问题和区间问题
    1.有一群孩子和一堆饼干,每个孩子有一个饥饿度,每个饼干都有一个大小。每个孩子只能吃一个饼干,且只有饼干的大小不小于孩子的饥饿度时,这个孩子才能吃饱。求解最多有多少孩子可以吃饱。#include<iostream>#include<vector>#include<algorithm>usingnamespacestd;intcalc......
  • 1.C语言学习--分支与循环
    1.什么是语句常在一条代码的末尾加一个分号“;”,C语言中分号前的就是一条语句;2.分支语句分支语句又叫选择结构。表示当满足某个条件时,程序可以选择不同的执行路径。包括if语句和switch语句。2.1if语句结构:if(条件)语句(带来的结果);else语句(带来的结果);若满足if括号里面的......
  • 无涯教程-concat()函数
    此方法添加两个或多个字符串,并返回一个新的单个字符串。concat()-语法string.concat(string2,string3[,...,stringN]);string2...stringN  - 这些是要串联的字符串。concat()-返回值返回单个串联的字符串。concat()-示例varstr1=newString("Thisis......
  • 2.C语言学习--分支与循环例题分析
    1.计算n的阶乘intmain(){ intret=1; inti=0; intn=0; scanf("%d",&n);//注意取地址符号&别忘记 for(i=1;i<=n;i++) { ret=ret*i; } printf("ret=%d\n",ret); return0;}效果如下所示:2.计算1!+2!+...+10!intmain(){ ......
  • 工业智能网关的功能、特点以及应用-天拓四方
    工业智能网关作为实现设备间通信和数据采集的关键组件,正发挥着越来越重要的作用。工业智能网关能够实现设备间的实时通信、数据采集、协议转换和远程控制等功能,为工业自动化提供了更加高效、灵活和可靠的数据处理解决方案。本文将重点介绍工业智能网关的功能、特点以及应用案例。一......
  • 使用spring-jpa和 hibernate实现逻辑删除
    一、使用spring-jpa和hibernate的@SQLDelete和@Where注解实现逻辑删除逻辑删除定义逻辑删除是指在删除数据库的某条记录时,并不是真正的将该条记录删除,而是通过某个字段来标识其状态为“删除”,在接下来的查询等操作时,根据此字段来过滤调被删除的记录。使用Hibernate进行逻辑删除......
  • 证书-23
    ####证书申请说明查找《数字证书管理服务》服务购买后得到记录值如下:尾......
  • pandas - reset_index() 函数 将Series对象转换为一个新的DataFrame
    #df=pd.read_excel(r"D:\PyCharm\年度数据处理\1月设备离线01.xlsx",sheet_name='Sheet2')#value_counts=df['解除时间'].value_counts().reset_index()#print(value_counts)这段代码的作用是对DataFrame中的"解除时间"列进行值计数,并将结果保存在一个新的DataFrame......
  • c# linq-to-sql 连接sqlserver数据库
    在已有项目下,点击新建项: 输入服务器名称:详见sqlserver登录页,如下所示:其中服务器名称、登录名、密码一一对应。且登录名必须为sa 接着选择连接的数据库名称-》点击测试连接,测试是否正常连接数据库。点击确认完成创建。 完成增删改查操作代码示例:///<summary>///......