- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我刚刚开始学习 iPhone 开发,在 friend 推荐 Corona SDK 后,我终于决定尝试一下。
现在,我刚刚开始学习如何使用加速计和绘制形状,并通过倾斜设备使它们移动。所以我想我可以制作一个水平仪工具作为我的第一个应用程序,并且当我倾斜时一切正常,但现在我决定尝试制作一个水平仪,但我不知道如何使气泡保持在圆圈内。
以下是我如何限制气泡在水平方向上移出小瓶的方法:
function bubbleBounds()
-- left side
if bubble.x < (_W/2 - vial.width/2 + bubble.width/2) then
bubble.x = (_W/2 - vial.width/2 + bubble.width/2)
end
-- right side
if bubble.x > (_W/2 + vial.width/2 - bubble.width/2) then
bubble.x = (_W/2 + vial.width/2 - bubble.width/2)
end
end
我了解到应该始终使用 2 的幂来制作图像,因此我制作了一个直径为 256 像素的圆,而我的气泡为 64 像素。如何编写一个限制气泡移出圆圈的函数?
谢谢辛迪
<小时/>@Mac,我知道图标大小,但 2 的幂只是在游戏中用于内存优化,对吗?
@蒂姆·C;
所以,如果我像这样编写边界函数;
local bubbleRadius = 32
local circleRadius = 128
local sqrt = math.sqrt
local centerX = display.contentWidth/2;
local centerY = display.contentHeight/2;
local function bubbleBounds()
Length = sqrt(centerX * centerX + centerY * centerY)
normalizedX = centerX/Length;
normalizedY = centerY/Length;
limitedX = normalizedX * circleRadius;
limitedY = normalizedY * circleRadius;
if bubble.x < centerX - limitedX + bubbleRadius then
bubble.x = centerX - limitedX + bubbleRadius
end
if bubble.x > centerX + limitedX - bubbleRadius then
bubble.x = centerX + limitedX - bubbleRadius
end
if bubble.y < centerY - limitedY + bubbleRadius then
bubble.y = centerY - limitedY + bubbleRadius
end
if bubble.y > centerY + limitedY - bubbleRadius then
bubble.y = centerY + limitedY - bubbleRadius
end
end
Runtime:addEventListener("enterFrame", bubbleBounds)
但是现在当我运行它时,它是矩形包装而不是圆形,加速度计也表现得非常奇怪和滞后。以下是我设置加速度计的方法:
local acc = {}
function acc:accelerometer(event)
bubble.x = centerX - (centerX * event.yGravity * 2);
bubble.y = centerY - (centerY * event.xGravity * 2);
end
Runtime:addEventListener("accelerometer", acc)
哪里出了问题?
最佳答案
这里您需要的是计算从圆心到气泡对象的矢量,并将移动限制为不超过圆的半径。
为此,请获取从圆心到气泡对象的向量,对其进行标准化,然后将其乘以圆的半径。这将产生一个与原始向量具有相同角度的新向量,但仅限于圆的范围内。
例如,假设圆心为0,0,气泡的位置为x,y。
伪代码:
Length = sqrt(x*x + y*y); //pythagorean theorem
normalizedX = x/Length;
normalizedY = y/Length;
limitedX = normalizedX * circleRadius;
limitedY = normalizedY * circleRadius;
此外,为了防止气泡完全超出圆的边界,您应该使用圆的半径减去气泡的半径作为限制半径。
<小时/>查看新发布的代码后,问题似乎在于您如何实现数学。
首先,长度计算应该针对气泡的矢量,而不是中心点的矢量。
其次,您仍然需要根据半径分别检查每个轴上的边界。这将始终产生一个矩形边界框,除非您纯粹根据距中心的向量的长度进行操作。
尝试这样的事情:
local bubbleRadius = 32;
local circleRadius = 128;
local sqrt = math.sqrt;
local centerX = display.contentWidth/2;
local centerY = display.contentHeight/2;
local function bubbleBounds()
bubbleX = bubble.x - centerX;
bubbleY = bubble.y - centerY;
Length = sqrt(bubbleX * bubbleX + bubbleY * bubbleY);
normalizedX = bubbleX/Length;
normalizedY = bubbleY/Length;
if Length > circleRadius then
bubbleX = normalizedX * circleRadius;
bubbleY = normalizedY * circleRadius;
bubble.x = bubbleX + centerX;
bubble.y = bubbleY + centerY;
end
end
关于iphone - 计算圆形 wrapper ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6158915/
我假设 jls 中描述的转换是根据优先级排序的。首先具有更高的优先级。 jls 因此我解决了 Boxing 比 Unboxing 具有更高的优先级。我决定检验这个假设。 研究以下代码: public
谁能解释一下我的 html 设计出了什么问题 Profile 问题是 div 标签(#profile wrapper)正在增加它的 margin top,如果我增加 #intro w
下面的完整代码示例(已成功编译)是我的问题的简化且稍微做作的示例。 NatPair 是一对 Nat ,我想使用函数 Num 将二进制 NatPair 操作逐点“提升”到 lift_binary_op_
给定以下函数: public void convertToWrapper(long[] longsToConvert) { } 和 public void convertToPrimitiv
我有这样的代码: class Base { } class Derived : Base { } class Wrapper { public T Value { get; } pub
我正在安装 SonarQube v5.0。 我正在运行 Windows Server 2012 64 位(虚拟操作系统)、Java 1.8 64 位和 SonarQube windows-x86-64
我正在为我的一个组件编写测试用例,该组件具有路由器(使用 withrouter)。我收到错误 wrapper.find is not a function。基本要求是需要检查我的渲染中是否存在标签,还
如何制作 在不改变结构的情况下,内部包装器比包装器本身更大? HTML CSS .page { width: 100%; height: 400px; bor
为了引导 Gradle-Wrapper,我需要从需要 HTTP Basic-Auth 的 Artifactory 中提取 Gradle 发行版。我的构建环境无法访问外部世界 - 这被公司代理阻止。我的
我正在构建一个Spring-Boot应用程序(2.1.4.RELEASE),并且正在使用它创建一个Gradle Wrapper gradle clean wrapper 我的gradle版本是5.4
以下代码取自这篇文章:How to create Scala swing wrapper classes with SuperMixin? import scala.swing._ import ja
我想同时使用 Boost.Asio 的 strand 和 prioritized wrapper。 在我编写代码之前,我阅读了以下信息: Boost asio priority and strand
Android Studio 的 Gradle 选项到底有什么区别: Android Studio->Preferences->Gradle 使用默认的gradle wrapper(推荐)和使用可定制
目前我有一个设置宽度为 1240 像素的包装器。可以想象,这意味着我页面中心的 1240 像素始终被包装器覆盖。 我还有一张宽度为 3160 像素的图像(1920 像素的图像大小,在中间切割并由 12
这只是一个练习,但我无法弄清楚其中的歧义: private static void flipFlop(String str, int i, Integer iRef) { System.out.pri
所以我现在正在编写我的网站,我正在使用两个 div 在背景中创建某种渐变,其中 div#bg1 为灰色,div#bg2 为深灰色。但是当我添加包装器 div 时,bg1 和 bg2 仍然遵循包装器的顶
已解决:必须 float #main div,并对结构进行许多其他重大更改。但致命一击是 float 的。 可以在 http://thepremium.ca/amodestblog 查看有问题的网站
操作系统:Windows 8.1 Visual Studio 高级版 2013 我有一个复杂的 MVC 应用程序,我已经运行了多年。我能够毫无问题地在调试中运行应用程序。然而,就在今天下午,当我尝试发
在带有 python 3.6.8 的 Ubuntu 18.04 上,尝试安装 Airflow。当我运行airflow initdb命令时,抛出以下错误 Traceback (most recent c
我将我的 Android Studio 升级到 2.3 版,然后开始出现此错误: Error:org.gradle.wrapper.WrapperExecutor.forProjectDirector
我是一名优秀的程序员,十分优秀!