当给定闪光角度和速度时,计算物体的轨迹

2024-04-22

我正在尝试从大炮中发射炮弹并使其遵循现实的路径。射击角度根据大炮的方向而变化(自动定向到鼠标指针)。所以我想弄清楚的是,当给定角度和设定速度时,如何沿着抛物线路径移动炮弹。

我读到,这可以在没有复杂的三角学的情况下完成(在高中时从未听过),并且可以通过在每个刻度上将重力添加到 yVelocity 来简单地计算。然而,此时,我不知道如何计算初始 yVelocity(同样,取决于大炮方向)。

您可以在此处查看当前动画:http://kate.ict.op.ac.nz/~welfajw1/portfolio/videos/task3-assignment2.swf http://kate.ict.op.ac.nz/~welfajw1/portfolio/videos/task3-assignment2.swf

这一切都是在AS3中完成的,我的代码如下:

主要时间线代码:

import flash.display.*;
import flash.events.*;
import flash.geom.*;

var cannonball:ball_mc;
var angleDegree;

myCannon.addEventListener(Event.ENTER_FRAME, cannonEnterFrame);

function cannonEnterFrame(pEvt)
{
    var mc = myCannon;
    var mg = myCannon.myGun;

    //find angle for orientation
    var angleRadian = Math.atan2(mouseY - mc.y, mouseX - mc.x);

    //convert to degrees
    angleDegree = angleRadian * 180 / Math.PI;

    //limit rotation
    if(angleDegree > -63 && angleDegree < 20)
        mg.rotation = angleDegree;
}

stage.addEventListener(Event.ENTER_FRAME, stageRefresh);

function stageRefresh(pEvt)
{
    if (cannonball)
    {
        //move every "tick"
        cannonball.move();
    }
}

stage.addEventListener(MouseEvent.CLICK, mouseClicked);

function mouseClicked(pEvt)
{
    //starting position of the ball
    cannonball = new ball_mc(100, 475);

    //SEND IN INITIAL x, y VELOCITIES
    cannonball.fire(20, angleDegree);

    //add to stage
    stage.addChild(cannonball);
}

ball_mc代码:

package 
{

    import flash.display.MovieClip;
    import flash.sensors.Accelerometer;
    import flashx.textLayout.formats.Float;


    public class ball_mc extends MovieClip
    {
        //constant gravity
        public static const g:Number = 2;

        //starting velocities
        private var ux:Number;
        private var uy:Number;

        public function ball_mc(startX:int, startY:int)
        {
            x = startX;
            y = startY;
        }

        public function fire(vx:Number, vy:Number):void
        {
            ux = vx;
            uy = vy;
        }

        public function move():void
        {
            //distance moved in x dir
            var sx:Number = ux; 
            //new velocity in y dir
            var vy:Number = uy + g;
            //distance moved in y dir
            var sy:Number = uy + g/2;

            //apply movement
            x += sx;
            y += sy;

            //save new y velocity
            uy = vy;
        }
    }
}

你需要一点物理知识。

初始速度必须使用您自己添加的一些标准来计算。一个例子是通过按下鼠标时鼠标与大炮之间的距离来计算初始速度。如果距离较大,则弹丸的速度较大;如果距离较小,则弹丸的速度较小。

您添加一个类型为 ENTER_FRAME 的事件侦听器。

我猜这是二维动画,所以你必须在任何时间点找到当前的 x 和 y。

这是一些代码:

var TimeperFrame:Number = 1/fps //fps is not a constant, here you should add a number, a value that you previously added in fla. document properties. I usualy use 60 fps
var Time:Number = 0;

addEventListener(ENTER_FRAME, movingCannonBall);
function movingCannonBall(e:Event):void
{
   Time += TimeperFrame;
}

现在这是射弹轨迹的方程。

x = xo + vxo·t

y = yo + vyo·t - 0.5·g·t^2

yo = 你的炮弹的初始高度

vyo = 初始 y 速度; vyo = vo·sin θ

t = 过去的时间,我们通过上层代码控制

g = 地球表面加速度 (9.81 m/s^2)

xo = 起点的初始距离

vxo = 初始 x 速度; vxo = vo·cos θ

现在,在上面的代码中,我们添加这些方程,它应该如下所示:

var TimeperFrame:Number = 1/fps
var Time:Number = 0;
var initx: Number = cannonball.x;
var inity: Number = cannonball.y;
var initVelocity: Number = (you define initial Velocity by your criteria)
var G: Number = 9.81;

addEventListener(ENTER_FRAME, movingCannonBall);
function movingCannonBall(e:Event):void
{
   Time += TimeperFrame;
   cannonball.x = initx + Math.cos(angle) * initVelocity * Time;
   cannonball.y = inity + Math.sin(angle) * initVelocity * Time - G * Time * Time * 0.5
}

这应该有效。我已经多次使用这个代码,它很高效,而且很简单。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

当给定闪光角度和速度时,计算物体的轨迹 的相关文章

  • 在 Flash AS3 中捕获未处理的 IOErrorEvent

    错误 2044 未处理的 IOErrorEvent text 错误 2036 从不加载 完全的 这就是我每次尝试使用加载器加载不存在的图像时看到的情况 我正在获取 URL 列表 但无法验证它们是否指向任何有用的内容 每当遇到 404 时 它
  • 视频swf的php正则表达式

    我想从对象 嵌入 html 源获取视频 url 我读到我可以使用正则表达式来获取它 但我和正则表达式不是朋友 这就是我所拥有的
  • HTTPS 上的 SWFUpload 无法正常工作

    当目标 servlet 侦听 HTTPS 时 我在使用 SWFUpload 上传文件时遇到问题 在 HTTP 上它工作得很好 仅当使用 FireFox 或 Opera 时才会出现此问题 在 IE 上它工作正常 没有尝试过其他浏览器 EDIT
  • 有没有办法覆盖动作脚本运算符,特别是我想覆盖等于运算符

    是否可以覆盖 equals 运算符 即 对于可以通过 2 个或更多字段匹配来确定相等性的客户类别 如果您的意思是重载 作为 equals 的同义词 那么您不能 因为 ActionScript 不提供运算符重载 只需为您的类编写一个 equa
  • 在android中加载swf文件时出现问题

    当我在 Android 模拟器中加载交互式 SWF 文件时遇到问题 我使用2 3 1 AVD 这是代码 package com androidpeople view import android app Activity import an
  • 如何在flex中绘制虚线

    经过一番搜索和阅读 Graphics 类文档后 我找不到指定线条的线条样式的方法 我的意思是这条线是实线还是虚线 有人可以帮助我吗 Thanks 无论如何 您不能仅仅通过使用 Flex 库类 当然 你也可以自己做 这是一个实现它的类 根据找
  • 如何在 AS3 中设置 swf 的宽度和高度?

    如何在 AS3 中设置 swf 的宽度和高度 到目前为止 这是我的代码 package import flash display Sprite public class Game extends Sprite 现在 加载时它处于任意默认大小
  • 需要澄清应用程序域

    我需要对这个主题进行一些澄清 因为我刚刚遇到将 swf 加载到重用加载器对象中的问题 假设我有 3 个 SWF 主文件 swfchildA swfchildB swf Main swf 中有一个可重用的加载程序对象 myloader loa
  • as3命名空间-获取一个带有减号的属性[重复]

    这个问题在这里已经有答案了 可能的重复 e4x as3 如何访问名称中带有破折号的节点 https stackoverflow com questions 5317404 e4x as3 how to access a node with
  • 在 AS3 中将 Little-endian ByteArray 转换为 Big-endian

    AS3中如何将Little endian ByteArray转换为Big endian 我将 bitmapData 转换为 Big endian ByteArray 然后使用 Adob e Alchemy 将其推入内存 然后当我从内存中读取
  • 我可以从 C# 转换为 asp.Net 以在线托管应用程序吗? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 是否可以将 C 应用程序转换为 as
  • Actionscript 3主类是根,但不允许动画虚拟相机

    我最近开始使用 Actionscript 3 学习 Animate CC 我正在尝试使用 Animate 的 虚拟相机 功能 为我提供一个可以平移 旋转和缩放游戏的相机 当根没有子类时 很容易实现 Camera 例如 您可以在屏幕上放置一个
  • 在 Mac OS X (Mavericks) 上的 Adob​​e AIR 中的两台显示器上显示两个全屏窗口

    我使用的是 Mac OS X Mavericks 使用 Adob e AIR 我想在两个显示器 内置笔记本电脑视网膜显示器和外部 HDMI 显示器 上分别显示单独的全屏窗口 我可以在主显示器上获得全屏窗口 在辅助显示器上获得几乎全屏的窗口
  • AS3 是否可以复制 Shape 对象?

    我正在尝试制作一个可用于复制的形状 这是我所做的 我正在尝试做的以及我陷入困境的解释 在 Flash IDE 画笔 中手动绘制形状 创建了一个包含形状的新影片剪辑 作为一个类导出 实例化该类 var mc MovieClip new sha
  • 从另一个域加载外部图像

    是否可以从另一个域加载图像 jpg png gif 并操作像素 我想当下载 复制图像时它就在我的域中 使用加载器并将内容添加到图像组件时 我在调试器中收到错误 我想这里有一些跨域策略在起作用 但在继续之前我需要更确定它是如何工作的 我想 如
  • 更改 AS3 中的 TextField 选择颜色

    如何更改 ActionScript 3 中 TextField 的选择 突出显示 颜色 我有一个输入文本字段 黑色背景上有白色文本 因此 选择是不可见的 这对于可用性来说非常糟糕 谢谢 另一种方法是使用文本布局框架 特别是使用 Select
  • Actionscript 对象的属性数量

    如何获取通用 Actionscript 对象中的属性数量 如数组长度 您必须循环所有元素才能对它们进行计数 function objectLength myObject Object int var cnt int 0 for var s
  • Facebook 聊天在打开时隐藏 Flash 应用程序

    运行 Flash 应用程序时 如果我打开新的或现有的 Facebook 聊天窗口 我的 Flash 内容就会消失 我可以继续听到应用程序中播放的音乐 并且当我关闭 最小化 Facebook 聊天窗口时 我的 Flash 内容会重新出现 这是
  • 我应该等待 Flash Player 10.1 还是使用 Flash Lite 3 来为手机和设备开发 Flash 内容

    Adobe 将在 2010 年第一季度推出 Flash Player 10 1 这将在桌面和移动设备上提供一致的运行时 因此我假设如果它是为 Web 构建的 那么它也可以在移动设备上运行 我即将开始为手机开发基于 Flash 的应用程序 我
  • 如何在动作脚本 3 中设置/访问外部 swf 文件的动态文本字段?

    我正在处理一个 fla 文件 其中添加了一个 swf 文件 我如何在该 swf 文件的动态文本上设置文本 有没有直接设置文本的方法 我不想在 url 中作为参数传递 我试过这样 var rq URLRequest new URLReques

随机推荐

  • Delphi - MySQL 最好使用的数据感知组件

    我需要我的应用程序连接到我的 Web 服务器的 MySQL 数据库 最好的选择是什么 首选数据感知组件 我尝试了 zeos 7 但不断收到错误 SQL 错误 客户端不支持服务器请求的身份验证协议 考虑升级MySQL客户端 但未能修复 Tha
  • 在比较分支时,有没有办法在 GitHub 中“隐藏”合并提交? [关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 我的 10
  • 如何使用 Junit 对 cordova 插件进行单元测试?

    我已经完成了一些 Cordova 插件 我想对其编写单元测试 这个想法是 例如 在我运行 cordova build android 后 测试文件将被移动到 Android 上的正确文件夹 我可以使用 Java 运行测试 那可能吗 我见过一
  • 如何根据单元格值使用颜色设置 Asp.net GridView 单元格的样式

    我有一个Gridview 它有一个名为student Class 网格视图上大约有 80 个类 我已使用 GroupBy 查询对此类进行分组 现在我想用不同的颜色来设计这个不同的类 这怎么可能 把所有的类都写在上面并不容易RowDataBo
  • Android webView 的 iframe 的 shouldOverrideUrlLoading

    我有一个由 Javascript 控制的本地网站 并将其加载到 WebView 中 该网站实际上是一个带有 iframe 的主页 其内容根据用户输入而变化 主页上有一个 下一步 按钮 它运行一些 javascript 函数并决定在 ifra
  • 两个数组的乘积之和(点积)

    首先 我知道我的标题可以更好地表述 但我的数学课已经结束了 我已经记不起正确的单词了 我需要做这样的事情 伪c int digits1 new int 10 0 1 2 3 4 5 6 7 8 9 int digits2 new int 1
  • Material Design lite 所需的复选框验证未显示错误消息

    我正在使用 Material Design Lite 来制作表单 我面临的问题是 当在复选框上设置所需的验证时 它似乎在渲染后立即隐藏错误消息 请注意 实际验证正在按预期进行 只是未显示错误消息 这是一个解决这个问题的代码笔 http co
  • Android Gradle:找不到符号变量

    我在使用 gradle 构建时遇到错误 如下所示 error cannot find symbol variable image name 我在用着ContextCompat getDrawable getActivity R drawab
  • 在Python中将字符串截断为特定字节数

    如何将字符串截断为不超过 50 个字节 a asdfzx awelkjawletjawetr dlgawklejtwgasdgsdfgd sdfasdfsdafa rewgargasregawergedrhsedhesrdhrthdrfjy
  • Selenium WebDriver 和下拉框

    如果我想选择下拉框的一个选项 有多种方法可以实现 我一直用 driver findElement By id selection sendKeys Germany 但这并不是每次都有效 有时会选择另一个选项 所以我用谷歌搜索了一下 发现这段
  • 如何使用 awk 将一组重复的行转置为列

    我有一个文本文件 其中包含 7 列数据 格式如下 18030 AAJ51 FTO rs9939609 C 30090620 10 A T 18030 AAJ51 CAT rs1001179 C 11468118 10 C C 18030 A
  • 有没有比“手表制造”更明智的替代方案?

    我遇到了这个有用的提示 如果您经常处理文件并且希望它们自动构建 则可以运行 手表品牌 每隔几秒钟它就会重新运行一次 一切都会构建完成 然而 它似乎一直在吞噬所有的输出 我认为它可能更聪明 也许显示输出流 但抑制 全部 不做任何事情 这样如果
  • Like子句和sql注入

    我对这种情况存有疑问 我在存储过程中有这样的查询 SELECT column1 column2 FROM table1 WHERE column1 like column1 我的问题是 这容易受到 SQL 注入攻击吗 我需要将其更改为这样的
  • 如何在PDF文档之前显示加载屏幕

    在我们的应用程序中 我们有动态生成的 PDF 文档的链接 链接看起来像这样主机 22 5 file 3136 pdf所以对于浏览器来说它就像一个静态的 pdf 文档 单击链接时 它会打开一个新窗口 该窗口仅接收 PDF 文档 无 HTML
  • 仅使用本机库的 C# 简单游戏

    我可以找到一组java 2D 游戏教程 http zetcode com tutorials javagamestutorial and 安卓游戏教程 http obviam net index php table of contents
  • 计算数组中向量之间的最大距离

    假设我们有一个包含 n 个向量的数组 我们想要计算这些向量之间的最大欧氏距离 最简单 天真的 的方法是迭代数组 并为每个向量计算其与所有后续向量的距离 然后找到最大值 然而 这个算法会增长 n 1 相对于数组的大小 对于这个问题还有其他更有
  • 继续阅读 JavaScript 中的链接

    我有一个像传记这样的字段 其中包含文本 我需要在第一页上显示该字段的一半 部分 文本 然后出现继续阅读链接 单击该链接后 剩余文本将显示在同一页面上 我需要在 HTML 中实现这一点 谁能帮我 请注意 这是快速原型设计 如果你使用jquer
  • 可以在 iOS 6 中显示“App Store 模式”吗?

    是否可以在 iOS 6 中显示一个模式视图控制器来在 App Store 中展示我的应用程序 是的你可以 iOS6 看一眼SKStoreProductViewController https developer apple com libr
  • 如何在 Laravel 7.x 中从控制器返回视图时传递 cookie?

    在 laravel 7 x 中 有什么方法可以在返回视图时将 cookie 传递给客户端吗 类似于 return view welcome gt cookie name value min 嗯 我做了一些研究 发现有一些方法 我熟悉的两个是
  • 当给定闪光角度和速度时,计算物体的轨迹

    我正在尝试从大炮中发射炮弹并使其遵循现实的路径 射击角度根据大炮的方向而变化 自动定向到鼠标指针 所以我想弄清楚的是 当给定角度和设定速度时 如何沿着抛物线路径移动炮弹 我读到 这可以在没有复杂的三角学的情况下完成 在高中时从未听过 并且可