原文:How To Make a Breakout Game with SpriteKit and Swift: Part 1
作者:Michael Briscoe
译者:kmyhy

更新说明:本教程由 Michael Briscoe升级为 Xcode 8 和 Swift 3。原文作者是 Barbara Reichart。

Sprite Kit 是苹果的iOS 和 OS X 游戏开发框架。它不仅拥有强大的绘图能力,也拥有一个易于使用的物理引擎。更好的是,你可以用最熟悉的工具:Swift、Xcode 和 IB 进行开发!

你可以用 Sprite Kit 做许多事,学习它的一个最好方法就是用它编写一个简单游戏。

在这个两部分的教程中,你将学习如何创建一个逃逸游戏,Sprite kit 的使用,碰撞检测,用物理引擎弹动小球,通过触摸控制木板,以及游戏状态。

如果你没接触过 Sprite kit,你可以在继续本教程之前阅读一下这篇 Sprite Kit Swift 初学者教程。

开始

首先下载开始项目。这个项目用标准的 Xcode game 模板创建。为了节省时间,assets 和 state 类已经被导入了。后面来学习游戏状态。

首先来看一眼项目。Build& run,你会看到:

Sprite Kit 可视化编辑器

我们首先来配置场景文件。打开 GameScene.sks 文件。这个 Sprite Kit 场景会在一个可视化比机器中打开,每个元素都陈列在其中,你可以在游戏中和 GameScene.swift 中访问它们。

首先你要修改场景大小,让它和本教程的目标屏幕一致:iPhone 6 的屏幕。你可以用 Xcode 右边的属性面板的 Scene 一栏来干这件事。如果找不到属性面板,你可以通过 View/Utilities/Show Attributes Inspector 来打开属性面板。将场景的 size 设置为 568x320。

注意:如果你的 assets 库中包含了多种比例系数的图片(比如 1x、2x、3x),请将场景大小设置为 1x。Sprite Kit 会自动在运行设备上适配正确的图片。

然后是游戏背景。如下图所示,从 Object Library 中拖一个 Color Sprite 到 Xcode 窗口的右下角。如果你看不见 Object Library,请点击 View/Utilities/Show Object Library菜单。

在属性面板,将 Position 设置为 284,160,Texture 设置为 bg。

Build & run,你会看到:

拥有了一个漂亮的横屏背景后,我们来添加一支小球!还是在 GameScene.sks,拖一个 Color Sprite 到场景中。将它命名为 ball,Texture 设置为 ball,Position 设置为 284,220,Z Position 设为 2,确保小球显示在背景的上层。

Build & run,你会看到:

当然,它不会动。因为你需要为它添加物理引擎。

物理引擎

在 Sprite Kit 中你有两种环境:图形世界,也就是你在屏幕上看到的;以及物理世界,它决定了对象如何移动和交互。

首先,你需要用 Sprite Kit 的物理引擎去根据游戏逻辑改变世界。世界对象在 Sprite Kit 中是管理所有对象和进行模拟物理的主要对象。它还生成了能够施加到所有物体上的重力。默认重力为 -9.81,和地球的一样。因此,当你添加一个物体时,它会往下掉。

配置好世界对象,你可以在它里面添加根据物理规则进行交互的对象。最常见的方式是创建一个 sprite(图片)然后设置它的物理体。body 属性和世界对象决定它如何移动。

Body 可以是动态物体(球、忍者镖、小鸟……),能够移动,受物理力学影响,另外就是静态物体(平台、墙……),这些不受外力影响的东西。当你创建好 Body 之后,你可以设置大量的属性比如形状、密度、摩擦系数等等。这些属性严重影响了物体在世界中的行为。

在定义物体时,你可能奇怪它们的大小和密度单位是什么。在 Sprite Kit 内部使用米制系统(SI 单位)。但是在你自己的游戏中,你通常不关心真实的力和质量,只要始终一致就好。

将所有的物体添加到世界中后,Sprite Kit 会自动进行模拟。

来创建你的第一个物理体,选中刚刚添加的 ball 节点,在属性面板中,找到 Physics Definition 处。选择 Body Type 为 Bounding Circle,然后:

  1. 反选 Allows Rotation(允许旋转)
  2. Friction (摩擦系数)设为 0
  3. Restitution (恢复系数)设为 1
  4. Linear Damping (线性阻尼)设为 0
  5. Angular Damping (角补偿)设为 0

这里,你创建了一个立方体类型的物理体,是一个圆,大小和 ball 贴图相同。这个物理体受外力和冲量影响,能够和其它物理体发生碰撞。

它有这些属性:

  1. Allow Rotation 正如其名。它允许物体旋转或不旋转。这里,你不需要球体旋转。
  2. Friction 也简单——这里简单地设置为没有摩擦。
  3. Restitution 它就是对象的弹性。你设置为 1,表示球体和其它物体碰撞后,将表现为绝对弹性。简单说,球体会以相同的力弹回去。
  4. Linear Damping 模拟了液体或空气对物体线性速度的递减程度。在 Breakout 游戏中,球体在移动过程中速度不会衰减,因此设置为 0。
  5. Angular Damping 和 Linear Damping 一样,但针对的是角速度。这个设置不是必须的,因为你根本不允许旋转。

注意:通常,最好让物理体和玩家看到的非常接近。对于球体,这是很容易模拟的。但是,越复杂的形状你就越要花心思,因为复杂物体确实比较耗性能。从 iOS 8 和 Xcode 6 开始,Sprite Kit 支持
alpha 遮罩物体类型,自动把 Sprite 的形状作为物理体的形状,但需要注意的是,这会降低性能。

Build & run。如果你眼睛够尖,你会发现小球向下掉,消失在屏幕底部以外。

这是两个原因导致的:首先,场景中默认的重力加速度是模拟地球的重力加速度—— x 轴上是 0,y 轴上是 -9.8。其次,你的场景的物理世界没有边界,边界充当了束缚小球的笼子的角色。让我们来解决它。

困住小球

打开 GameScene.swift,在 didMove(to:) 方法最后添加代码,在屏幕四周创建一个看不见的樊篱:

// 1
let borderBody = SKPhysicsBody(edgeLoopFrom: self.frame)
// 2
borderBody.friction = 0
// 3
self.physicsBody = borderBody
  1. 创建了一个边界物体。和球体的立方体类型的物体不同,边界物体没有体积和质量,不受外力或冲量的影响。
  2. Friction 设置为 0,这样球体与之碰撞后不会速度衰减。相反,你需要的是绝对反弹,这样会以击中时相同的角度离开。
  3. 你可以为每个节点设置物理体。这里,你将边界物体赋给场景。注意:SKPhysicsBody 的坐标是相对于节点位置的。

运行项目,你会看到球体和之前一样下落,但现在会在“笼子”的下端弹回。因为我们将笼子和环境中的摩擦力去掉了,同时将恢复设置为完美弹性体,小球会无限地反弹下去。

小球还没有完成,我们先移除重力,然后给它施加一个力,让它在屏幕上没完没了地反弹。

无尽的反弹

是时候让小球滚动了(也就是反弹)。在 GameScene.swift 的 didMove(to:) 方法中,在之前的代码后添加:

physicsWorld.gravity = CGVector(dx: 0.0, dy: 0.0)let ball = childNode(withName: BallCategoryName) as! SKSpriteNode
ball.physicsBody!.applyImpulse(CGVector(dx: 2.0, dy: -2.0))

首先从场景中去掉重力加速度,然后从场景的子节点中通过名字(这个名字是你可以通过可视化编辑器进行设置)来获取小球,然后施加一个力。这个力将使物理体沿给定方向运动(在这里,即右下 45 度方向)。当小球开始运动后,因为你添加的“笼子”它只能在屏幕上来回反弹了。

来试一下吧!Build & run,你会看到不断弹来弹去的小球!

添加木板

没有木板就不是逃逸游戏了,现在来添加它吧!

回到 GameScene.swift,用构建小球的方式在可视化编辑器中构建木板(以及它的物理体)——拖入一个 Color Sprite 在屏幕底部正中位置,然后设置它是属性:

  • Name = paddle
  • Texture = paddle.png
  • Position = 284,30
  • Z Position = 3
  • Body Type > Bounding rectangle
  • 反选 Dynamic
  • Friction: 0
  • Restitution: 1

这些属性大部分和小球类似。只不过这次的物理体是 Bounding rectangle,因为它和长方形的板子更匹配。

这里反选了 Dynamic,这样木板就变成静态物体了。这使得木板不会受力和冲量的影响。待会你就会明白这一点很关键。

Build & run,你会在场景中看到木板,小球会在它上面反弹(如果你有耐心的话):

干得不错——接下来让玩家可以移动木板!

移动木板

开始移动!移动木板需要检测触摸。你可以在 GameScene 中通过实现下列 touch 回调方法来实现检测触摸:

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?)
override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?)
override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?)

但在此之前你需要添加一个属性。打开 GameScene.swift,添加下列属性:

var isFingerOnPaddle = false

这个属性用于保存玩家是否触摸到了木板上。你在实现模板的拖拽时需要用到它。

现在在 GameScene.swift 中实现 touchesBegan(_:with:) 方法:

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {let touch = touches.firstlet touchLocation = touch!.location(in: self)if let body = physicsWorld.body(at: touchLocation) {if body.node!.name == PaddleCategoryName {print("Began touch on paddle")isFingerOnPaddle = true}}
}

这个方法获取了触摸,并找到它在屏幕上的位置。然后用 body(at:) 方法查找该位置是否存在一个物理体。然后,判断触摸位置是否有节点,如果有,这个节点是不是就是我们要找的木板。早先我们已经设置过这个对象的名字——你可以通过 name 属性判断对象是否是我们想要找的对象。如果触摸位置是木板,输出文字消息,然后将 isFingerOnPaddle 方法设置为 true。

Build & run。当你点击木板,你会看到控制台中输出了消息。

现在,来实现 touchesMoved(_:with:) 方法:

override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {// 1if isFingerOnPaddle {// 2let touch = touches.firstlet touchLocation = touch!.location(in: self)let previousLocation = touch!.previousLocation(in: self)// 3let paddle = childNode(withName: PaddleCategoryName) as! SKSpriteNode// 4var paddleX = paddle.position.x + (touchLocation.x - previousLocation.x)// 5paddleX = max(paddleX, paddle.size.width/2)paddleX = min(paddleX, size.width - paddle.size.width/2)// 6paddle.position = CGPoint(x: paddleX, y: paddle.position.y)}
}
  1. 判断玩家是否已经触摸到了木板。
  2. 如果是,根据玩家手指的移动更新木板的位置。这需要获取当前触摸位置和上一次的触摸位置。
  3. 获取木板对应的 SKSpriteNode。
  4. 用木板当前位置加上两次触摸位置之差。
  5. 在移动木板之前,限制它的位置,防止它移出屏幕左右两边。
  6. 根据之前计算的结果,设置木板的位置。

还剩一件事情,就是在 touchesEnded(_:with:) 方法中进行一些清理工作:

override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {isFingerOnPaddle = false
}

这里讲 isFingerOnPaddle 设为 false。这确保了玩家从屏幕上拿走他们的手指,然后又再次点击木板时,木板不会跳到之前触摸的位置。

太棒了!Build & run,小球在屏幕上跳动,你可以用木板来控制它的移动了。

哟呵——这太好玩啦!

制造碰撞

现在,你已经拥有了一只会活蹦乱跳的小球以及一块可以用手指移动的木板,虽然这很有趣,但你需要让玩家在游戏中体会输与赢。当小球碰到屏幕底部而不是木板时,游戏就算输掉了。但如何用 Sprite Kit 来判断呢?

Sprite Kit 可以检测两个物理体之间的碰撞。但是,为了让它能够正常工作,你需要执行几个步骤才行。简单罗列如下。每个步骤的具体做法后面再论:

  • 设置物理体的位掩码:在游戏中,你可以有不同类型的物理体——例如,玩家、敌人、子弹、奖励等等。要唯一识别这些不同类型的物体,每个物体都要设置多个位掩码。包括:

    • categoryBitMask: 这个位掩码用于识别物体属于哪一类别。你可以用它定义物体能够和其它物体进行交互。在游戏中,你可以最多设置 32 个自定义 category 掩码。对大部分游戏而言是足够的,每种物体都可以创建一个单独的 category。对于更复杂的游戏,每个物体可以同时属于多个 category。因此通过一些巧妙的设计,使你突破 32 种 category 的限制。
    • contactTestBitMask: 设置这个位掩码会让 Sprite Kit 在物体和其它物体(指定某个 category 的)发生碰撞时通知委托对象。默认,所有的位都是空的——发生碰撞时不会发送通知。为了性能起见,你只需要在 contact 掩码中设置真正感兴趣的部分。
    • collisionBitMask: 指定那些物体能够和该物体发生碰撞。例如你可以用这个掩码来减少超大物体和超小物体的碰撞,因为这种碰撞对于大物体来说影响微乎其微。你还可以用它来允许两个物体相互穿过。
  • 设置并实现 contact 委托:SKPhysicsWorld 有一个 contactDelegate 属性。当两个物体(contactTestBitMasks 匹配)发生碰撞或结束碰撞时,这个委托对象会被通知。

注意:位掩码?如果你从来没有用过位掩码,别担心!它们初一看很复杂,但真的很好用。
那么什么是位掩码?一个位掩码是一个多位二进制数。比如:1011 1000。没你想那么复杂。
但为什么说它们很有用?这是因为它们允许你从一个二进制数中获取状态信息,以及让你将二进制数中的指定位设置为指定状态。你可以用位运算符 AND 和 OR:

它允许你以非常紧凑的方式在单个变量中保存大量信息,但同时还能访问和操作这些信息。

3、2、1,碰:编写代码

首先为不同的 category 创建常量。在 GameScene.swift 中,在其它常量后添加下列代码用于指定不同的类别:

let BallCategory   : UInt32 = 0x1 << 0
let BottomCategory : UInt32 = 0x1 << 1
let BlockCategory  : UInt32 = 0x1 << 2
let PaddleCategory : UInt32 = 0x1 << 3
let BorderCategory : UInt32 = 0x1 << 4

定义了 5 个 category。首先将最后一位设为 1 其它位设置为 0。然后用左移操作符将这个位向左移。最终,每个 category 常量只有 1 位是 1,同时这个 1 的位置在二进制数中和其它 category 的 1 的位置区分开来。

目前,你只用得到屏幕底部的 category 和小球的 category,但随着游戏的编写,你会逐渐用到其它 category。

创建完常量,再创建一个横穿屏幕底部的一个物理体。请独自完成这个任务,在创建屏幕四边的“笼子”时,你已经学习了创建的方法。

参考答案

在 GameScene.swift 的 didMove(to:) 方法中添加:

let bottomRect = CGRect(x: frame.origin.x, y: frame.origin.y, width: frame.size.width, height: 1)
let bottom = SKNode()
bottom.physicsBody = SKPhysicsBody(edgeLoopFrom: bottomRect)
addChild(bottom)

现在,重点来了。首先创建 categoryBitMasks。在 didMove(to:)方法中设置游戏对象的 categoryBitMaskds:


let paddle = childNode(withName: PaddleCategoryName) as! SKSpriteNodebottom.physicsBody!.categoryBitMask = BottomCategory
ball.physicsBody!.categoryBitMask = BallCategory
paddle.physicsBody!.categoryBitMask = PaddleCategory
borderBody.categoryBitMask = BorderCategory

这段代码简单地为之前创建的物理体设置了 categoryBitMask。

然后,同样在 didMove(to:) 方法中设置 contactTestBitMask:

ball.physicsBody!.contactTestBitMask = BottomCategory

目前,你只需要关心小球和屏幕底部的碰撞通知。

然后,将 GameScene 设置为所有物理碰撞的委托。

将这句:

class GameScene: SKScene {

修改为:

class GameScene: SKScene, SKPhysicsContactDelegate {

这正式声明:GameScene 是一个 SKPhysicsContactDelegate (因为它实现了这个协议),它会接收所有指定的物体的碰撞通知。好哒!

现在你需要将 GameScene 设置为 physicsWolrd 的委托。在 didMove(to:) 方法 physicsWorld.gravity = CGVector(dx: 0.0, dy: 0.0) 一句后添加:

physicsWorld.contactDelegate = self

追后,你需要实现 didBegin(_:) 方法来处理碰撞事件。在 GameScene.swift 中添加方法:

func didBegin(_ contact: SKPhysicsContact) {// 1var firstBody: SKPhysicsBodyvar secondBody: SKPhysicsBody// 2if contact.bodyA.categoryBitMask < contact.bodyB.categoryBitMask {firstBody = contact.bodyAsecondBody = contact.bodyB} else {firstBody = contact.bodyBsecondBody = contact.bodyA}// 3if firstBody.categoryBitMask == BallCategory && secondBody.categoryBitMask == BottomCategory {print("Hit bottom. First contact has been made.")}
}
  1. 创建两个变量,用于保存发生碰撞的两个物体。
  2. 检查两个物体哪一个的 categoryBitMask 更小。然后将它们分别存入两个本地变量,这样,categoryBitMask 值小的一个物体总是保存到 firstBody 变量。这会节省一些工作,在处理两个指定 category 的碰撞时。
  3. 因为之前做过排序,你只需要检查 firstBody 是否是 BallCategory,secondBody 是否是 BottomCategory 就足以知道小球是否和屏幕底部碰上了,因为你已经知道如果 firstBody 是 BottomCategory 的话, secondBody 不可能是 BallCategory(因为 BottomCategory 的值比 BallCategory 大)。目前的处理仅仅是输出一个日志信息。

来试一下你的代码。Build & run,如果你没犯任何错误的话,每当小球没有碰到木板而碰到屏幕底部时,你会看到控制台中输出日志。

OK! 现在最难的工作已经完成——剩下的工作就是添加砖块和游戏逻辑,这将在第二部分进行介绍。

结束

从这里下载完成到这一步骤的示例项目。

继续阅读第二部分教程,在那里你将添加砖块并完成游戏。

如果你有任何问题和评论,请在下面留言!

查看全文
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

相关文章

  1. 不能错过的Sketch实用新技巧和资源集锦

    Sketch是一款基于Mac的矢量绘图应用。面对着功能复杂繁琐的photoshop&#xff0c;Sketch相比较而言身轻如燕。最近也掀起了用Sketch设计产品原型的热潮&#xff0c;因为用它来画设计稿简直轻而易举&#xff0c;相比于Axure它有更丰富的组件库和更全面的尺寸控制&#xff0c;让我…...

    2024/4/21 12:32:25
  2. 双眼皮手术冬天做可以吗

    ...

    2024/4/21 12:32:25
  3. 调试WebStorm中创建的Angular应用程序

    https://blog.jetbrains.com/webstorm/2017/[Angular CLI ](https://cli.angular.io/) 可以帮助我们 引入 一个新的 [Angular ](https://angular.io/)应用程序&#xff0c;并准备使用TypeScript和Webpack配置。 在这篇文章中&#xff0c;我们将看到如何在WebStorm中调试这些应用…...

    2024/5/2 3:14:41
  4. ie调试程序快捷方式

    调试程序是 F12 开始调试或继续F5 或 F8停止调试SHIFT F5逐过程执行F10单步执行F11跳出SHIFT F11全部中断CTRL SHIFT B打开“更改异常行为”下拉菜单CTRL SHIFT E设置或取消设置断点&#xff08;焦点需要位于编辑器中&#xff09;F9设置断点条件&#xff08;焦点需要位于…...

    2024/5/2 15:34:12
  5. 如何使用Intellij调试AngularJS

    设置Intellij或Webstorm来调试AngularJS很简单。 1.为Chrome安装JetBrains IDE支持扩展 转到Chrome网上应用店&#xff0c;并添加到 chromeBrains IDE支持 image.png2.在Intellij上创建一个新的JavaScript调试配置 在Intellij上&#xff0c;转到“运行>编辑配置...”&#x…...

    2024/5/2 17:23:24
  6. 推荐angularJs开发,调试,测试工具

    首先是NodeJs 代码编辑工具 sublime text 轻量级 webstorm 占的资源多一些 断点调试工具 chrome插件Batarang 版本管理工具 github tortoisegit 代码合并和混淆工具 grunt以及插件 grunt-contrib-uglify&#xff0c; 对代码进行混淆的 grunt-contrib-concat&#…...

    2024/4/21 12:32:21
  7. Chrome浏览器调试技巧

    js断点调试的两种方式 方法1&#xff1a;在 Source 内容区设置 &#xff08;1&#xff09;找到要调试的文件&#xff0c;然后在内容源代码左侧的代码标记行处点击&#xff0c;即可打上一个断点。 &#xff08;2&#xff09;刷新浏览器&#xff0c;当页面代码运行到断点处便会…...

    2024/5/2 12:05:20
  8. 客户端代码调试

    在开发过程中&#xff0c;我们不可能保证所写的页面代码很完美&#xff0c;所以遇到问题可能就会进行代码调试。 下面为大家找了几篇文章&#xff0c;针对浏览器&#xff0c;编译器等对代码的调试方法&#xff0c;有不全面的地方也欢迎大家补充修改~ 1.chrome调试bug 在我们…...

    2024/4/21 12:32:19
  9. 如何在VS Code 中运行、调试你的第一个Angular2程序

    准备 在使用 VS Code进行调试之前&#xff0c;需要做一些准备工作&#xff0c;确保必要的环境已经安装&#xff0c;您的Angular2 应用程序已经可以正常编译和运行。 最新版本的 VS Code 谷歌浏览器&#xff08;其他主流浏览器也可以&#xff09; 配置 在VS Code 中安装“De…...

    2024/4/21 12:32:17
  10. 双眼皮适合什么时候开

    ...

    2024/5/2 13:36:40
  11. 埋线双眼皮时间久了线哪去了

    ...

    2024/5/2 12:36:32
  12. 修复双眼皮为什么贵

    ...

    2024/4/23 21:17:49
  13. angular4 编译html,Angular4绑定html内容出现警告的处理方法

    Angular4绑定html内容出现警告的处理方法2019-01-07编程之家https://www.jb51.cc编程之家收集整理的这篇文章主要介绍了Angular4绑定html内容出现警告的处理方法&#xff0c;编程之家小编觉得挺不错的&#xff0c;现在分享给大家&#xff0c;也给大家做个参考。前言众所周知在W…...

    2024/4/21 12:32:13
  14. 割了双眼皮后怎么消肿快

    ...

    2024/4/25 13:39:28
  15. angularjs ie8 router-ui 不支持属性和方法

    ie8 报错TypeError: Object doesnt support this property or method <a class"ng-binding" href"" ui-sref"state-name"> 查找发现http://stackoverflow.com/questions/20246511/angularjs-and-ie8-unsupported-property-or-method 不…...

    2024/4/21 12:32:12
  16. 割双眼皮后眼睛凹陷的原因

    ...

    2024/4/29 18:45:35
  17. vue.js不支持IE8你们是怎么做的?

    作者&#xff1a;知乎用户链接&#xff1a;https://www.zhihu.com/question/51468145/answer/126207448来源&#xff1a;知乎著作权归作者所有。商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处。如果您的客户群体IE8用户占据较大的比例&#xff0c;不建议使用vue…...

    2024/4/20 16:24:20
  18. 做双眼皮扎着白眼仁怎么办

    ...

    2024/4/20 16:24:19
  19. 框架-angular--cli

    一&#xff1a;Angular-CL安装&#xff1a; npm install -g angular/cli (npm install -g angular-cli(老版本))ng --versionng helpng new my-projectng serve (ng serve --prod --aot自动压缩和编译代码体积会更少)(http://localhost:4200/) (ng serve --o,使用--o…...

    2024/4/20 16:24:17
  20. 双眼皮整失败了

    ...

    2024/4/21 12:32:11

最新文章

  1. 【实时数仓架构】方法论

    笔者不是专业的实时数仓架构&#xff0c;这是笔者从其他人经验和网上资料整理而来&#xff0c;仅供参考。写此文章意义&#xff0c;加深对实时数仓理解。 一、实时数仓架构技术演进 1.1 四种架构演进 1&#xff09;离线大数据架构 一种批处理离线数据分析架构&#xff0c;…...

    2024/5/2 18:27:11
  2. 梯度消失和梯度爆炸的一些处理方法

    在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言&#xff0c;在此感激不尽。 权重和梯度的更新公式如下&#xff1a; w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...

    2024/3/20 10:50:27
  3. 华为海思2024春招数字芯片岗机试题(共9套)

    huawei海思2024春招数字芯片岗机试题(共9套&#xff0c;有答案和解析&#xff0c;答案非官方&#xff0c;未仔细校正&#xff0c;仅供参考&#xff09;&#xff08;WX:didadidadidida313&#xff0c;加我备注&#xff1a;CSDN huawei数字题目&#xff0c;谢绝白嫖哈&#xff09…...

    2024/5/1 10:20:41
  4. 医院内外网安全通讯:实现安全与便捷的跨网即时通讯

    医院作为医疗信息化程度较高的机构之一&#xff0c;内部数据传输频繁&#xff0c;网络安全问题备受关注。医院内外网隔离是确保医院网络安全性和保密性的关键措施。然而&#xff0c;医院在业务开展中经常需要进行内外网数据交换&#xff0c;比如患者数据传输至内网&#xff0c;…...

    2024/4/30 2:54:39
  5. 深入理解springboot

    第五章 访问数据库 1.配置数据源 在applicaiton.properties中 spring.datasource.urljdbc:mysql://localhost:3306/chapter5 第九章 springmvc 1.总体流程 http请求发送给控制器&#xff0c;控制器与业务层交互&#xff0c;业务层使用noSQL缓存&#xff0c;业务层与数据访问层…...

    2024/4/30 15:25:26
  6. 【外汇早评】美通胀数据走低,美元调整

    原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...

    2024/5/1 17:30:59
  7. 【原油贵金属周评】原油多头拥挤,价格调整

    原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...

    2024/5/2 16:16:39
  8. 【外汇周评】靓丽非农不及疲软通胀影响

    原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...

    2024/4/29 2:29:43
  9. 【原油贵金属早评】库存继续增加,油价收跌

    原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...

    2024/5/2 9:28:15
  10. 【外汇早评】日本央行会议纪要不改日元强势

    原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...

    2024/4/27 17:58:04
  11. 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响

    原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...

    2024/4/27 14:22:49
  12. 【外汇早评】美欲与伊朗重谈协议

    原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...

    2024/4/28 1:28:33
  13. 【原油贵金属早评】波动率飙升,市场情绪动荡

    原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...

    2024/4/30 9:43:09
  14. 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试

    原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...

    2024/4/27 17:59:30
  15. 【原油贵金属早评】市场情绪继续恶化,黄金上破

    原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...

    2024/5/2 15:04:34
  16. 【外汇早评】美伊僵持,风险情绪继续升温

    原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...

    2024/4/28 1:34:08
  17. 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势

    原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...

    2024/4/26 19:03:37
  18. 氧生福地 玩美北湖(上)——为时光守候两千年

    原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...

    2024/4/29 20:46:55
  19. 氧生福地 玩美北湖(中)——永春梯田里的美与鲜

    原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...

    2024/4/30 22:21:04
  20. 氧生福地 玩美北湖(下)——奔跑吧骚年!

    原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...

    2024/5/1 4:32:01
  21. 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!

    原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...

    2024/4/27 23:24:42
  22. 「发现」铁皮石斛仙草之神奇功效用于医用面膜

    原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...

    2024/4/28 5:48:52
  23. 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者

    原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...

    2024/4/30 9:42:22
  24. 广州械字号面膜生产厂家OEM/ODM4项须知!

    原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...

    2024/5/2 9:07:46
  25. 械字号医用眼膜缓解用眼过度到底有无作用?

    原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...

    2024/4/30 9:42:49
  26. 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...

    解析如下&#xff1a;1、长按电脑电源键直至关机&#xff0c;然后再按一次电源健重启电脑&#xff0c;按F8健进入安全模式2、安全模式下进入Windows系统桌面后&#xff0c;按住“winR”打开运行窗口&#xff0c;输入“services.msc”打开服务设置3、在服务界面&#xff0c;选中…...

    2022/11/19 21:17:18
  27. 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。

    %读入6幅图像&#xff08;每一幅图像的大小是564*564&#xff09; f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...

    2022/11/19 21:17:16
  28. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

    win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面&#xff0c;在等待界面中我们需要等待操作结束才能关机&#xff0c;虽然这比较麻烦&#xff0c;但是对系统进行配置和升级…...

    2022/11/19 21:17:15
  29. 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...

    有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows&#xff0c;请勿关闭计算机”的提示&#xff0c;要过很久才能进入系统&#xff0c;有的用户甚至几个小时也无法进入&#xff0c;下面就教大家这个问题的解决方法。第一种方法&#xff1a;我们首先在左下角的“开始…...

    2022/11/19 21:17:14
  30. win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...

    置信有很多用户都跟小编一样遇到过这样的问题&#xff0c;电脑时发现开机屏幕显现“正在配置Windows Update&#xff0c;请勿关机”(如下图所示)&#xff0c;而且还需求等大约5分钟才干进入系统。这是怎样回事呢&#xff1f;一切都是正常操作的&#xff0c;为什么开时机呈现“正…...

    2022/11/19 21:17:13
  31. 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...

    Win7系统开机启动时总是出现“配置Windows请勿关机”的提示&#xff0c;没过几秒后电脑自动重启&#xff0c;每次开机都这样无法进入系统&#xff0c;此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一&#xff1a;开机按下F8&#xff0c;在出现的Windows高级启动选…...

    2022/11/19 21:17:12
  32. 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...

    有不少windows10系统用户反映说碰到这样一个情况&#xff0c;就是电脑提示正在准备windows请勿关闭计算机&#xff0c;碰到这样的问题该怎么解决呢&#xff0c;现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法&#xff1a;1、2、依次…...

    2022/11/19 21:17:11
  33. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...

    今天和大家分享一下win7系统重装了Win7旗舰版系统后&#xff0c;每次关机的时候桌面上都会显示一个“配置Windows Update的界面&#xff0c;提示请勿关闭计算机”&#xff0c;每次停留好几分钟才能正常关机&#xff0c;导致什么情况引起的呢&#xff1f;出现配置Windows Update…...

    2022/11/19 21:17:10
  34. 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...

    只能是等着&#xff0c;别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚&#xff0c;只能是考虑备份数据后重装系统了。解决来方案一&#xff1a;管理员运行cmd&#xff1a;net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...

    2022/11/19 21:17:09
  35. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

    原标题&#xff1a;电脑提示“配置Windows Update请勿关闭计算机”怎么办&#xff1f;win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢&#xff1f;一般的方…...

    2022/11/19 21:17:08
  36. 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...

    关机提示 windows7 正在配置windows 请勿关闭计算机 &#xff0c;然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;关机提示 windows7 正在配…...

    2022/11/19 21:17:05
  37. 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...

    钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...

    2022/11/19 21:17:05
  38. 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...

    前几天班里有位学生电脑(windows 7系统)出问题了&#xff0c;具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面&#xff0c;长时间没反应&#xff0c;无法进入系统。这个问题原来帮其他同学也解决过&#xff0c;网上搜了不少资料&#x…...

    2022/11/19 21:17:04
  39. 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...

    本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法&#xff0c;并在最后教给你1种保护系统安全的好方法&#xff0c;一起来看看&#xff01;电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中&#xff0c;添加了1个新功能在“磁…...

    2022/11/19 21:17:03
  40. 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...

    许多用户在长期不使用电脑的时候&#xff0c;开启电脑发现电脑显示&#xff1a;配置windows更新失败&#xff0c;正在还原更改&#xff0c;请勿关闭计算机。。.这要怎么办呢&#xff1f;下面小编就带着大家一起看看吧&#xff01;如果能够正常进入系统&#xff0c;建议您暂时移…...

    2022/11/19 21:17:02
  41. 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...

    配置windows update失败 还原更改 请勿关闭计算机&#xff0c;电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;配置windows update失败 还原更改 请勿关闭计算机&#x…...

    2022/11/19 21:17:01
  42. 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...

    不知道大家有没有遇到过这样的一个问题&#xff0c;就是我们的win7系统在关机的时候&#xff0c;总是喜欢显示“准备配置windows&#xff0c;请勿关机”这样的一个页面&#xff0c;没有什么大碍&#xff0c;但是如果一直等着的话就要两个小时甚至更久都关不了机&#xff0c;非常…...

    2022/11/19 21:17:00
  43. 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...

    当电脑出现正在准备配置windows请勿关闭计算机时&#xff0c;一般是您正对windows进行升级&#xff0c;但是这个要是长时间没有反应&#xff0c;我们不能再傻等下去了。可能是电脑出了别的问题了&#xff0c;来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...

    2022/11/19 21:16:59
  44. 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...

    我们使用电脑的过程中有时会遇到这种情况&#xff0c;当我们打开电脑之后&#xff0c;发现一直停留在一个界面&#xff1a;“配置Windows Update失败&#xff0c;还原更改请勿关闭计算机”&#xff0c;等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢&#xff0…...

    2022/11/19 21:16:58
  45. 如何在iPhone上关闭“请勿打扰”

    Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...

    2022/11/19 21:16:57