再次说说状态机之三-歪果仁的StateMachine,nullable,undoManager和blobcity游戏的数学原理,还有TA,UniversalRP和一小哥开源项目

目录

开源(也可能不开源)的状态机

原来矢量可以==null

Cando/Redo

六边形的数学原理

TA的Editor扩展开发工具



开源(也可能不开源)的状态机

从一个六边形地图格子的插件里

主要功能不是做状态机,而是地图编辑,但里面有个dll

Fuent-State-Machine

看到这个 statemachine,整个人都不好了

原来矢量可以==null

写了多年csharp和unity,一直以为vector至少必须==Vector3.zero

 internal static Nullable<Vector3> GetWorldPositionForMouse(Vector2 mousePosition, float placementHeight)

 System.Nullable空间里,有可以控的vector,同布尔值bool?

原来小丑还是自己

看来gameObject ==nil的老大难问题也不是不可解决

Cando/Redo

六边形的数学原理

Red Blob Games

原来才发现我们小时候玩的小游戏

也是充满数学原理

TA技术美术的Editor扩展开发工具

(从腾讯大神那介绍,获取来的)

还是那句话吧,多看看,只要你一天没退休,都别认为自己已经懂了;但是带着这么多的未知,又谈何退休呢

Rory Jones - Technical Artist

小哥GIT

IceLanguage (Icelanguage) / Repositories (github.com)

UniversalRP Sample

Home · Unity-Technologies/UniversalRenderingExamples Wiki (github.com)

<think>好的,我现在需要帮助用户在Android Studio中创建一个包含MainActivityPayActivity的项目。用户的具体需求是MainActivity要有显示金额的TextView、跳转到支付的Button,以及显示支付状态的TextView。PayActivity应该是支付页面。 首先,我得回忆一下Android项目的基本结构。通常,每个Activity对应一个布局文件,所以需要创建两个布局文件,一个是activity_main.xml,另一个是activity_pay.xml。MainActivity需要包含三个控件:金额TextView、支付Button状态TextView。PayActivity可能需要一些支付相关的输入,比如卡号、金额确认等,但用户没有详细说明,可能暂时先做一个简单的页面,确保跳转正常。 接下来,用户可能需要在MainActivity中设置Button的点击事件,以便跳转到PayActivity。这涉及到Intent的使用。记得在AndroidManifest.xml中注册PayActivity,不过Android Studio在创建新Activity时应该会自动处理。 然后,布局方面,用户提到使用RelativeLayout或者LinearLayout。根据引用[2],最外层是RelativeLayout,顶部是TextView,然后是LinearLayout水平放置账号EditText。或许MainActivity的布局也可以类似,用RelativeLayout来安排三个控件的位置。比如,金额TextView在顶部,中间是支付Button,底部是状态TextView。或者垂直排列的LinearLayout,这样更简单。 在代码部分,MainActivity需要找到这三个控件,并为Button设置点击监听器。点击后启动PayActivity。可能还需要处理PayActivity返回的结果,比如支付是否成功,更新状态TextView。这时候可能需要使用startActivityForResult或者更现代的Activity Result API。 另外,关于引用[3]提到的页面跳转,用户可能需要参考如何正确创建Intent并启动Activity。PayActivity的创建应该在Android Studio中通过新建Activity来完成,确保布局Java类正确生成。 可能的问题点:布局文件的编写是否正确,控件id是否正确引用,Intent的跳转是否有效,以及返回结果的处理。需要一步步引导用户完成这些步骤,并提醒常见错误,比如忘记注册Activity,或者id命名不一致导致的空指针异常。 最后,测试流程也很重要,确保点击Button后能跳转到PayActivity,并且返回后状态能更新。可能需要模拟支付成功或失败的场景,通过Intent传递数据回来。 总结步骤:新建项目,添加两个Activity,设计布局文件,编写跳转逻辑,处理返回结果,测试功能。</think>### 分步实现步骤 #### 步骤1:创建新项目 1. 打开Android Studio,选择 **New Project** → **Empty Views Activity**(或 **Empty Activity**)模板。 2. 输入项目名称(如 `PaymentDemo`),选择语言为Java或Kotlin(本文以Java为例),点击 **Finish**。 #### 步骤2:添加PayActivity 1. 右键点击包名 → **New** → **Activity** → **Empty Views Activity**。 2. 输入名称 `PayActivity`,确保勾选生成布局文件 `activity_pay.xml`,点击 **Finish**[^3]。 #### 步骤3:设计MainActivity布局(activity_main.xml) ```xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:padding="16dp"> <!-- 显示金额 --> <TextView android:id="@+id/tv_amount" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="金额:100元" android:textSize="24sp"/> <!-- 支付跳转按钮 --> <Button android:id="@+id/btn_pay" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="20dp" android:text="立即支付"/> <!-- 显示支付状态 --> <TextView android:id="@+id/tv_status" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="20dp" android:text="支付状态:未支付" android:textColor="#FF0000"/> </LinearLayout> ``` #### 步骤4:实现MainActivity跳转逻辑 ```java public class MainActivity extends AppCompatActivity { private TextView tvStatus; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); tvStatus = findViewById(R.id.tv_status); Button btnPay = findViewById(R.id.btn_pay); // 设置按钮点击事件 btnPay.setOnClickListener(v -> { Intent intent = new Intent(MainActivity.this, PayActivity.class); startActivityForResult(intent, 1); // 使用请求码1 }); } // 接收PayActivity返回的结果 @Override protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == 1 && resultCode == RESULT_OK && data != null) { boolean isSuccess = data.getBooleanExtra("isSuccess", false); tvStatus.setText("支付状态:" + (isSuccess ? "成功" : "失败")); } } } ``` #### 步骤5:设计PayActivity布局(activity_pay.xml) ```xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:padding="16dp"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="请输入支付信息" android:textSize="20sp"/> <!-- 模拟支付成功/失败按钮 --> <Button android:id="@+id/btn_success" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="20dp" android:text="模拟支付成功"/> <Button android:id="@+id/btn_fail" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="10dp" android:text="模拟支付失败"/> </LinearLayout> ``` #### 步骤6:实现PayActivity逻辑 ```java public class PayActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_pay); Button btnSuccess = findViewById(R.id.btn_success); Button btnFail = findViewById(R.id.btn_fail); btnSuccess.setOnClickListener(v -> { Intent resultIntent = new Intent(); resultIntent.putExtra("isSuccess", true); setResult(RESULT_OK, resultIntent); finish(); // 关闭当前页面 }); btnFail.setOnClickListener(v -> { Intent resultIntent = new Intent(); resultIntent.putExtra("isSuccess", false); setResult(RESULT_OK, resultIntent); finish(); }); } } ``` ### 关键点说明 1. **布局设计**:使用LinearLayout垂直排列控件,保持界面简洁[^2]。 2. **跳转逻辑**:通过`startActivityForResult`启动PayActivity,并监听返回结果更新状态。 3. **数据传递**:利用Intent的`putExtra``getBooleanExtra`传递支付状态。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

avi9111

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值