小编Tyl*_*own的帖子

SpriteKit的更新功能:时间与帧速率

我是编程和Spritekit的新手,我有兴趣探索毫秒和帧率之间的关系,以及如何将更新函数用作两者之间的中介.

帧率与毫秒

从本质上讲,帧速率和时间之间的主要区别在于时间始终是一致的,而帧速率则不然(由于密集的图形程序,它可能会下降).但是,时间通常在SKScene的更新事件(每帧调用)期间进行检查和设置,所以我想弄清楚时间是如何正确计算的,当你不知道有多少帧会在一秒钟内.

我目前正在观看太空射击游戏的更新事件,其中更新功能负责计算产生另一个外星人之前的时间间隔.您可以在此处查看完整代码:http://www.globalnerdy.com/2014/08/10/a-simple-shoot-em-up-game-with-sprite-kit-and-swift-part-one-最后一件事-第一最完整的项目/

// Called exactly once per frame as long as the scene is presented in a view
// and isn't paused
override func update(currentTime: CFTimeInterval) {
    var timeSinceLastUpdate = currentTime - lastUpdateTime
    lastUpdateTime = currentTime
    if timeSinceLastUpdate > 1 {
        timeSinceLastUpdate = 1.0 / 60.0
        lastUpdateTime = currentTime
    }
    updateWithTimeSinceLastUpdate(timeSinceLastUpdate)
}
Run Code Online (Sandbox Code Playgroud)

问题

我似乎无法弄清楚为什么timeSinceLastUpdate被设置为1.0/60.我知道它与帧率和秒之间的协调有关,但有人可以向我解释这个吗?另外,为什么我们允许使用小数?我认为时间间隔属于Int类型.

更重要的是,这是为了保持游戏玩法在帧速率下降时减速?谢谢阅读!

time xcode sprite-kit swift xcode6

8
推荐指数
1
解决办法
5947
查看次数

使用Swift + SpriteKit将节点移至手指

更新:我已经解决了这个问题,并且找到了一个更简单的方法来做到这一点,然后提供了答案。我的解决方案是使SPACESHIP的速度等于从我的手指触摸到的距离。为了加快运动速度,可以将该速度乘以一个常数。在这种情况下,我使用了16。我还摆脱了在touchesEnd事件中将lastTouch设置为nil的问题。这样,即使我松开手指,船仍会停下来。

override func update(currentTime: CFTimeInterval) {
/* Called before each frame is rendered */
    if let touch = lastTouch {
        myShip.physicsBody.velocity = CGVector(dx: (lastTouch!.x - myShip.position.x) * 16, dy: 0)
    }

}
Run Code Online (Sandbox Code Playgroud)

==============================

我有一个SPACESHIP节点,其运动仅限于X轴。当用户在屏幕上的某个位置按下并按住时,我希望SPACESHIP能够移动到手指的x坐标,而不希望在松开手指之前不停止向手指移动。如果SPACESHIP靠近用户的手指并且用户的手指仍被按下,则希望它逐渐减速并停止。我还希望在SPACESHIP改变方向,开始和停止时应用这种平滑运动。

我正在尝试找出最佳方法。

到目前为止,我已经创建了节点并且它可以正确移动,但是存在一个问题:如果我按下屏幕并按住不放,船最终将越过我的手指并继续移动。这是因为仅当我移动手指时才会触发更改船方向的逻辑。因此,基本上,将我的手指移到船上以改变船的方向是可行的,但是如果船越过我的静止指头,则不会改变方向

我需要SPACESHIP节点来识别它何时越过我的食指,并根据其与我手指的接近程度来更改其方向或停止。

以下是相关代码:

第1部分:当用户按下时,找出触摸来自何处,并使用速度相应地移动myShip(SPACESHIP)

override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {
    /* Called when a touch begins */
    let touch = touches.anyObject() as UITouch
    let touchLocation = touch.locationInNode(self)

    if (touchLocation.x < myShip.position.x) {
        myShip.xVelocity = -200
    } else {
        myShip.xVelocity = 200 …
Run Code Online (Sandbox Code Playgroud)

ios sprite-kit swift

5
推荐指数
1
解决办法
6365
查看次数

在.NET中将IQueryable映射到OData的域模型

我最近在ASP .NET Core Web API中实现了OData。只要我直接返回数据库模型,就可以找到成功。但是,当我尝试返回域模型时,便遇到了麻烦。

潜在的问题涉及在保持IQueryable返回类型的同时将数据类映射到域类。虽然我发现使用AutoMapper的MapTo扩展方法部分成功,但是我发现使用$ extend方法扩展也是域对象的实体集时不成功。

我创建了一个示例项目来说明此问题。您可以查看或下载完整的项目在GitHub上这里。请参阅下面的说明。

给定以下两个数据库类:

public class Product
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Description { get; set; }

    public ICollection<Order> Orders { get; set; }

    public Product() {
        Orders = new Collection<Order>();
    }
}

public class Order
{
    public int Id { get; set; }
    public Double Price { get; set; }  
    public DateTime OrderDate { get; set; }

    [Required]
    public int …
Run Code Online (Sandbox Code Playgroud)

.net c# iqueryable automapper odata

5
推荐指数
1
解决办法
377
查看次数

如何通过https从本地主机调用api

我目前在一个 2 人团队中开发 Web 应用程序。我正在开发客户端应用程序,而我的合作伙伴在一个单独的项目中开发后端。我的合作伙伴已将他的项目上传到我们的域 ( https://api.example.com ),并坚持只应通过 https 调用后端。

在开发我的客户端应用程序时,我通过 localhost 为其提供服务。问题是 localhost 默认通过 http 提供服务。我不知道如何通过https调用后端。

我正在通过 Angular 4 CLI 开发我的客户端应用程序。我试图通过自签名证书通过https://localhost为我的应用程序提供服务,但我在这样做时遇到了可怕的问题,因为 Chrome 检测到的证书不是真实的。

所以我被困住了。通过 https 调用我们的开发服务器的最佳方式是什么?或者,我应该这样做吗?合作伙伴是否应该为我开发客户端应用程序提供不同的 api 端点?我们应该如何共同努力解决这个问题?

api https cross-domain

4
推荐指数
1
解决办法
2万
查看次数

标签 统计

sprite-kit ×2

swift ×2

.net ×1

api ×1

automapper ×1

c# ×1

cross-domain ×1

https ×1

ios ×1

iqueryable ×1

odata ×1

time ×1

xcode ×1

xcode6 ×1