Touch无法玩“愤怒的小鸟”

本文详细描述了如何解决安装愤怒的小鸟后触控不响应的问题,通过对比8寸touch驱动并添加关键代码,以及调整上报数据中的TRACKING_ID,最终使愤怒的小鸟能够正常运行。
现象:touch进行菜单操作,玩一些重力感应游戏都正常,可就是装了
愤怒的小鸟后,点击“play”没有反应!

解决过程:
将程序与之前8寸的touch驱动对比,在注册input子系统部分有少一个
EV_SYN,所以加上:
input_device->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_ABS) | BIT_MASK(EV_SYN); //jeff add EV_SYN.
测试,还是不行!

继续,查看上报数据:
        input_event(ts->input, EV_ABS, ABS_MT_TRACKING_ID, tracking_id);
        input_event(ts->input, EV_ABS, ABS_MT_POSITION_X, xy_data.x1);
        input_event(ts->input, EV_ABS, ABS_MT_POSITION_Y, xy_data.y1);
        input_event(ts->input, EV_ABS, ABS_MT_TOUCH_MAJOR, 1);
        input_mt_sync(ts->input);
这里tracking_id的值在单点的时候为1,两点时为2,依次类推。
而8寸touch支持2点,ABS_MT_TRACKING_ID上报的是0,1.  所以很怀疑
是不是上报的TRACKING_ID应该从0开始,于是将每个上报前的tracking_id
做-1处理,结果测试ok,愤怒的小鸟可以玩了!

中间还使用多款多点触摸测试软件进行测试。

### C# 和 Unity 开发愤怒小鸟游戏 以下是关于如何使用 C# 和 Unity 实现愤怒小鸟游戏的核心功能的详细介绍。这包括创建 Win 脚本、处理猪角色的行为逻辑以及实现弹弓划线操作。 #### 游戏胜利条件脚本 为了检测家是否赢得游戏并显示星星奖励,可以编写以下 `Win` 类: ```csharp using UnityEngine; public class win : MonoBehaviour { public void Show() { GameManager._instance.ShowStars(); // 显示星星奖励[^1] } } ``` 此脚本通过调用 `GameManager` 的静态实例方法来展示星星奖励。 --- #### 猪角色行为逻辑 对于游戏中猪的角色行为,可以通过以下代码实现其碰撞响应机制: ```csharp using System.Collections; using UnityEngine; public class pig : MonoBehaviour { public float maxSpeed = 10f; // 设置相对速度上限 public float minSpeed = 5f; // 设置相对速度下限 private SpriteRenderer renderer; // 定义一个组件 public Sprite hurtSprite; // 受伤状态下的精灵图 private void Awake() { renderer = GetComponent<SpriteRenderer>(); // 初始化组件 } private void OnCollisionEnter2D(Collision2D collision) { if (collision.relativeVelocity.magnitude > maxSpeed) // 判断相对速度大小 { Destroy(gameObject); // 如果超过最大速度,则销毁对象 } else if (collision.relativeVelocity.magnitude > minSpeed && collision.relativeVelocity.magnitude < maxSpeed) { renderer.sprite = hurtSprite; // 更改精灵图为受伤状态 } } } ``` 在此代码中,当猪与其他物体发生碰撞时,会根据相对速度决定是否摧毁猪或者切换为受伤状态的图像[^2]。 --- #### 弹弓划线操作 实现弹弓划线的功能需要监听用户的触摸输入,并计算投掷角度和力度。以下是核心代码示例: ```csharp using UnityEngine; public class SlingshotController : MonoBehaviour { public GameObject birdPrefab; // 鸟的预制体 private Vector3 touchStartPos, touchEndPos; private bool isDragging = false; void Update() { if (Input.touchCount > 0) { Touch touch = Input.GetTouch(0); switch (touch.phase) { case TouchPhase.Began: isDragging = true; touchStartPos = Camera.main.ScreenToWorldPoint(touch.position); break; case TouchPhase.Moved: if (isDragging) { touchEndPos = Camera.main.ScreenToWorldPoint(touch.position); DrawLine(); } break; case TouchPhase.Ended: isDragging = false; LaunchBird(); break; } } } private void DrawLine() { Debug.DrawLine(transform.position, touchEndPos, Color.red); // 绘制拉伸线条 } private void LaunchBird() { Vector2 direction = touchStartPos - touchEndPos; // 计算方向向量 Instantiate(birdPrefab, transform.position, Quaternion.identity).GetComponent<Rigidbody2D>().AddForce(direction * 100); // 投射小鸟 } } ``` 这段代码实现了触屏拖拽绘制弹弓拉伸效果,并在家释放手指时发射小鸟[^2]。 --- #### 添加粒子系统 为了让游戏更具视觉吸引力,可以在目标被击中时触发粒子特效。具体做法是将粒子系统附加到目标物上,并在碰撞事件中激活它: ```csharp private ParticleSystem particleSystem; void Start() { particleSystem = GetComponent<ParticleSystem>(); } void OnDestroy() { particleSystem.Play(); // 当对象被销毁时播放粒子效果 } ``` 以上代码片段展示了如何利用 Unity 中内置的粒子系统增强用户体验[^1]。 --- ### 总结 上述内容涵盖了从基础的游戏逻辑构建到高级特性(如粒子系统的应用)等多个方面。这些技术能够帮助开发者快速搭建一款类似于《愤怒小鸟》的基础框架。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值