因此,Unity并没有在Android上做很多节奏游戏.我决定找出原因,然后将其编程为任务(无论如何都是基础).我最重要的障碍是用户输入.我们知道输入是基于统一的帧速率,而音乐游戏(我假设)更喜欢按下按钮和动作之间的最小可能延迟.
如果我们看一下音乐,在大约15到20毫秒的延迟时间,人耳会听到一些"被击败".
我听说Android Unity游戏以30FPS运行(因为60FPS吸干电池),简单的数学表明:每帧1000/30 = 33ms.我们可能没有注意到在15ms内计算,我们可能遇到18ms的灾难.假设我们总是在任何特定时刻达到这个30FPS.
当我从用户那里得到输入时,我可以在完全相同的帧上播放该输入的声音.但是,我们可以休息18ms.
现在有一种方法可以从鼠标和键盘获取DIRECT控件,它使用OnGui()而不是Update()来获取当场键盘或鼠标点击的事件.问题是,android可能无法解决这个问题(这对游戏手柄也不起作用)并且这些方法听起来很奇怪,特别是当我们尝试从OnGui()方法播放声音时.
我的问题:你会做什么,为什么?我们应该接受可能的18ms关闭,并假设我们达到30FPS,或者我们应该寻找一种可靠的方式直接获得输入,而不是等待更新来吗?
感谢您给我的任何见解,我还没有找到任何有用的文章.-Smiley
编辑 我只是用节拍器进行了一些基本的测试,在编辑器中以100FPS运行(每帧应该是10ms),在统一内部的节拍器上点击我的空格键.我得到的结果太可怕了.快速攻击:我的节拍器嘀嗒声接近20毫秒,但没有接近.点击节拍:我的目标嘀嗒声至少减少了200毫秒.除非我对这种节奏感到困惑,否则这是错误的.
目前我使用Debug.Log将我的测试数据提供给日志.任何人都可以请确认,如果这可能是原因(导致一些长时间的延迟?我知道调试不是那么优化),或者实际上是时间错了吗?
提前谢谢,-Smiley
所以,我一直在阅读 NAT-Punchthrough。我似乎明白了这个想法,但我很难实现它,而且我觉得我在这里错过了一步。测试此功能有点困难,因为当涉及到基于 Internet 的连接时,我几乎无法控制环境。
我有一个 SQL 服务器作为我的“协助者”运行,它保留服务器和客户端的外部地址,以及外部看到的端口。
以下是到目前为止的步骤: - 我通过存储服务器/客户端 IP/PORT 的 Web 请求(PHP 脚本)连接到我的 SQL 服务器 - 当两者都已知时,客户端和服务器都尝试连接(服务器主机在设置的端口上,客户端通过设置的端口连接) - 没有任何重大的事情发生
这里有 2 个未知数,我想和你核对一个。NAT-Punchthrough 是否真的要求我使用我计划在之后的步骤中连接的确切(内部/LAN)端口执行第一步?
如果是这样,我不知道我的服务器在水下究竟是如何工作的,所以它可能需要比我最初给定的静态端口更多的端口来连接,但这至少给了我一个提示。
如果有人对此有更多文档,请告诉我。
来源:
P2P 应用程序编程
http://www.mindcontrol.org/~hplus/nat-punch.html
我提供了一个库,我知道它使用C++.我这样导入了DLL:
[DllImport("pst")] private static extern int pst_get_sensor(ref PSTSensor sensor);
PSTSensor是一个结构体,在C++示例中它被定义为:
struct PSTSensor
{
char name[80]; /**< Device name */
int id; /**< Device identifier (for other tracking interfaces */
float pose[16]; /**< Device pose estimate as row-major matrix */
double timestamp; /**< Time the data was recorded */
};
Run Code Online (Sandbox Code Playgroud)
问题是,除了Int和Double之外,它还使用Float,更重要的是数组.数组在C#和C++之间有所不同.在pst_get_sensor(ref sensor);运行代码时使用此结构调用整个开发环境时崩溃了.
我目前在C#中使用这样的结构:
struct PSTSensor{
public char[] name;
public int id;
public float[] pose;
public double timestamp;
}
Run Code Online (Sandbox Code Playgroud)
我的问题是,我如何创建一个C++理解的数组,并正确返回?这甚至可能吗?
非常感谢,Smiley
我必须做一些非常愚蠢的事情,但以下是正确的:
CREATE EVENT delete_old
ON SCHEDULE
EVERY 1 DAY
COMMENT 'Clears old cache data from the DB.'
DO
DELETE FROM summoners
WHERE `date` < (NOW() - INTERVAL 7 DAY);
Run Code Online (Sandbox Code Playgroud)
下一位似乎在最后两行抛出语法错误:
CREATE EVENT delete_old
ON SCHEDULE
EVERY 1 DAY
COMMENT 'Clears old cache data from the DB.'
DO BEGIN
DELETE FROM summoners
WHERE `date` < (NOW() - INTERVAL 7 DAY);
END;
Run Code Online (Sandbox Code Playgroud)
据我所知,语法是正确的,但MySQL Workbench不同意.我打算在BEGIN - END部分内做多个表,这就是我需要它的原因.
我希望有人能弄清楚这里出了什么问题,我不知所措.提前谢谢,笑脸
所以我有这个:
SELECT p.plantnaam,o.levcode,o.offerteprijs
FROM plant p, offerte o
JOIN (SELECT plantcode , MIN(offerteprijs) AS offprijs
FROM offerte
GROUP BY plantcode) s
ON s.plantcode = p.plantcode
AND s.offprijs = o.offerteprijs
ORDER BY p.plantnaam,l.levcode
Run Code Online (Sandbox Code Playgroud)
显然在第6行,p.plantcode突然神奇地成为无效的标识符.为什么是这样?为什么在那之前,完全相同的表中的所有其他人都完美无缺?