(转)一个as3写的减速效果
2019独角兽企业重金招聘Python工程师标准>>>
写了好久没写出来,网上找到了,谢谢作者
原文:http://hi.baidu.com/sl19880127sl/blog/item/4e37f48fcfbac9e2f11f3680.html
AS3减速运动在做游戏开发时很重要,今天我们就介绍一种标准的AS3减速运动,其实就是高中物理知识。废话少说,先看效果:
下面我们就介绍使用flashdevelop来做这个程序,打开flashdevelop,新建一个as3项目(工程->新建工程->AS3 Project),然后在生成的Main.as中输入以下代码:
package
{
import flash.display.Sprite;
import flash.events.Event;
/**
* ...
* @author Jaja as-max.cn
*/
public class Main extends Sprite
{
public function Main():void
{
if (stage) init();
else addEventListener(Event.ADDED_TO_STAGE, init);
}
private function init(e:Event = null):void
{
removeEventListener(Event.ADDED_TO_STAGE, init);
// entry point
for (var i:int = 0; i < 5; i++) {
var ball:Ball = new Ball;
ball.start(int(Math.random() * 60), int(Math.random() * 60));
addChild(ball);
}
}
}
}
这里我们需要一个Ball类,在Main.as同目录下新建一个Ball.as文件,在其中输入以下代码:
package
{
import flash.display.Sprite;
import flash.events.Event;
import flash.events.MouseEvent;
/**
* ...
* @author Jaja as-max.cn
*/
public class Ball extends Sprite
{
/**
* 开始拖动时的小球x坐标
*/
private var dragStartX:int = 0;
/**
* 开始拖动时的小球y坐标
*/
private var dragStartY:int = 0;
/**
* 开始拖动时的鼠标x坐标
*/
private var dragStartMouseX:int = 0;
/**
* 开始拖动时的鼠标y坐标
*/
private var dragStartMouseY:int = 0;
/**
* 上一帧小球x坐标
*/
private var lastX:Number = 0;
/**
* 上一帧小球y坐标
*/
private var lastY:Number = 0;
/**
* 小球的x轴速度,单位(像素/帧)
*/
private var speedX:Number = 0;
/**
* 小球的y轴速度
*/
private var speedY:Number = 0;
/**
* 指定当前是否为正在拖动
*/
private var isDraging:Boolean = false;
/**
* 小球加速度,单位(像素/帧/帧);
*/
private var acceleration:Number = 0.2;
public function Ball() :void
{
//build ui
graphics.beginFill(0x999999);
graphics.lineStyle(2);
graphics.drawCircle(15, 15, 15);
this.addEventListener(Event.ADDED_TO_STAGE, addThis);
}
private function addThis(event:Event):void {
this.addEventListener(Event.REMOVED_FROM_STAGE, removeThis);
this.addEventListener(MouseEvent.MOUSE_DOWN, downThis);
stage.addEventListener(MouseEvent.MOUSE_UP, upStage);
}
private function removeThis(event:Event):void {
this.removeEventListener(Event.REMOVED_FROM_STAGE, removeThis);
this.removeEventListener(Event.ADDED_TO_STAGE, addThis);
this.removeEventListener(MouseEvent.MOUSE_DOWN, downThis);
stage.removeEventListener(MouseEvent.MOUSE_UP, upStage);
this.removeEventListener(Event.ENTER_FRAME, enterFrame);
}
private function downThis(event:MouseEvent):void {
dragStartX = this.x;
dragStartY = this.y;
dragStartMouseX = this.parent.mouseX;
dragStartMouseY = this.parent.mouseY;
isDraging = true;
start(speedX, speedY);
}
private function enterFrame(event:Event):void {
if(isDraging){
this.x = dragStartX + this.parent.mouseX - dragStartMouseX;
this.y = dragStartY + this.parent.mouseY - dragStartMouseY;
speedX = this.x - lastX;
speedY = this.y - lastY;
lastX = this.x;
lastY = this.y;
}else {
this.x += speedX;
this.y += speedY;
if (afterSpeedX == 0 && afterSpeedY == 0) {
this.removeEventListener(Event.ENTER_FRAME, enterFrame);
}
var afterSpeedX:Number = Math.abs(speedX) - acceleration;
var afterSpeedY:Number = Math.abs(speedY) - acceleration;
if (afterSpeedX < 0) {
afterSpeedX = 0;
}
if (afterSpeedY < 0) {
afterSpeedY = 0;
}
speedX = speedX >= 0?afterSpeedX: -afterSpeedX;
speedY = speedY >= 0?afterSpeedY: -afterSpeedY;
}
if (this.x < 0) {
speedX = Math.abs(speedX);
}
if (this.x > stage.stageWidth - this.width) {
speedX = -Math.abs(speedX);
}
if (this.y < 0) {
speedY = Math.abs(speedY);
}
if (this.y > stage.stageHeight - this.height) {
speedY = -Math.abs(speedY);
}
}
private function upStage(event:MouseEvent):void {
isDraging = false;
}
public function start(speedx:int, speedy:int):void {
speedX = speedx;
speedY = speedy;
if(!this.hasEventListener(Event.ENTER_FRAME)){
this.addEventListener(Event.ENTER_FRAME, enterFrame);
}
}
}
}
保存文件,按F5或者Ctrl+Enter调试我们的程序,就可以看到效果了,可以用鼠标拖动小球试试。当然如果你电脑上没有安装flashdevelop,用flash也可以编译这些文件,将flash的场景绑定Main类就可以编译了。
转载于:https://my.oschina.net/ahuaahua/blog/17580
(转)一个as3写的减速效果相关推荐
- [html] 写一个类似刮刮卡效果的交互,即鼠标划过时显示号码
[html] 写一个类似刮刮卡效果的交互,即鼠标划过时显示号码 <title>Document</title> <style> *{ margin:0; paddi ...
- [css] 使用css写一个红绿灯交替的动画效果
[css] 使用css写一个红绿灯交替的动画效果 <!DOCTYPE html> <html lang="en"><head> <meta ...
- 教你实现一个朴实的Canvas时钟效果
摘要:今天教大家写一个canvas的时钟案例,效果可能看起来比较简单,没有那些花里胡哨的. 本文分享自华为云社区<如何实现一个朴实无华的Canvas时钟效果>,作者: 北极光之夜.. 一. ...
- linux用户motd,linux需要装?那就和我一起来配置一个动态的MOTD登陆效果吧
说到motd,熟悉linux系统的同学应该熟悉,motd它是linux系统上的一个普通的文件,在linux系统上的/etc/motd文件 .作用于:每次系统需要登陆时,通过终端展示一些消息给登陆用户. ...
- php实现跑马灯闪亮,JavaScript_基于jquery实现的文字向上跑动类似跑马灯的效果,想实现一个类似跑马灯的效果, - phpStudy...
基于jquery实现的文字向上跑动类似跑马灯的效果 想实现一个类似跑马灯的效果,发现跑马灯有空格.效果也不美观,于是用jquery写了个 页面代码 恭喜187****5204获得1000RBM 恭喜1 ...
- 让View具有减速效果的动画——FlingAnimation
Android动画和Transition系列文章 初识属性动画--使用Animator创建动画 再谈属性动画--介绍以及自定义Interpolator插值器 三谈属性动画--Keyframe以及Vie ...
- javascript实现div层移动的减速效果
其实原理很简单,当一个div层从起始位置到最终终点位置(endX,endY)的过程中,假设每10ms移动一次.那么利用一个目标值(终点坐标)减去当前div层的位置除以一个定长来作为下次div层要移动的 ...
- 图片上的文字用CSS写出毛玻璃效果
图片上的文字用CSS写出毛玻璃效果 2016-10-04 08:11 网页设计 标签:css 1297 发表评论 半透明颜色最初的使用场景之一就是作为背景.将其叠放在照片类或其他 ...
- 自己写Shader-翻书效果
尝试练习翻书效果shader的制作 思路 翻页原理 直翻页: 思路: 代码: 总结: 曲线从一角翻页 思路: 效果 把效果和数学联系起来 角翻页有点复杂,,, 思路 直直的翻页,即将页面旋转180完成 ...
最新文章
- Lync server 2013 监控角色的安装
- 程序员面试题精选100题(47)-数组中出现次数超过一半的数字[算法]
- Android的sqlite使用外部,Android 使用外部已经建立好的sqlite数据库
- static变量 java
- python内置函数大全,赶紧收藏!!
- 金志文机器人歌叫什么_MIR发布《移动机器人部署安全指南》白皮书
- Python全栈之路Day16
- Oracle 11G R2(11.0.2.4.0) RAC打PSU(11.2.0.4.11.2.0.4.171017)
- 计算机主机电源灯不亮,电脑电源指示灯不亮怎么回事
- openwrt安装aliddns使用阿里云ddns
- 均值、方差、标准差、协方差详解及MATLAB实现
- 开源公告|腾讯代码安全指南开源,涉及C/C++、Go等六门编程语言
- 【数学】拉格朗日乘子法(Lagrange Multiplier) 和KKT条件理解
- php 过滤字符 b,php过滤所有中英文标点符号
- 从C快速入门C++ (命名空间、引用、函数重载)
- 黑苹果手动修改intel hd3000核显显存大小.2022-11-29
- ipad安装linux模拟器下载文件,教你在linux下安装游戏模拟器
- IEEE顶级期刊和会议-车辆动力学及其控制和计算机视觉CV
- 中国农产品冷链物流行业运营动态及前景发展规划建议报告2021-2027年
- openjudge 1.5.45 金币
热门文章
- hdf heg 批量拼接_[转载]MODIS Aerosol product/MODIS气溶胶产品
- linux停止ftp服务命令,centos没有service命令,怎么启用ftp服务
- Linux 命令行小技巧《叹号的用处》
- C++ 枚举类型介绍
- [C语言] qsort 快速排序函数讲解
- poj2029(二维树状数组)
- python将二维列表内容写入和读取.csv文件
- Educational Codeforces Round 90 (Rated for Div. 2)部分题解
- 后缀数组 ---- 2018~2019icpc焦作H题[后缀数组+st表+二分+单调栈]
- 流网络的最小割问题c语言,「网络流24题」最小路径覆盖问题