在Lufylegend中如何设置bitmap或者sprite的缩放和旋转中心

最近两天有个lufylegend游戏引擎群的群友需要做一个项目,其中要解决的需求是:获取照相机拍摄的图片,根据图片的EXIF信息让图片显示为“正常”情况,并且需要给图片添加一些事件侦听。何为正常呢?就是我们拍照的时候,因为横着或者竖着拿相机或者手机拍摄的图片,最终显示出来的时候要是拍摄时候的样子,比如:

“我霉”orz



我就当您是用过lufylegend的道友了。那么我们知道Bitmap这个层的默认旋转中心是其内容中心,也就是:bitmap.getWidth()*0.5,bitmap.getHeight()*0.5,默认的缩放中心则是其左上角。

Sprite层的默认旋转中心和默认缩放中心都是左上角,如:

如图所示:

Bitmap和Sprite缩放中心是左上角,往右下角这个方向进行变形;

Bitmap的旋转中心则是内容中心,如图,其围绕着一个圆心旋转各个点则在外接圆上;

Sprite旋转中心还是左上角,所以其旋转的时候则是在那个大圆上;

那么,如果我们需要一个Bitmap或者Sprite不管旋转或者缩放都是其内容中心的时候,怎么做呢?

答案就是:将上面两种情况结合起来,组成一个新的层即可,原理也非常简单,如下:

代码是这样的:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>rotateAndScale</title>
</head>
<body>
    <div id="mylegend"></div>
    <script src="../lufylegend-1.9.10.min.js"></script>
    <script type="text/javascript">
init(80,"mylegend",600,480,main);
var loader;
function main(){
    loader = new LLoader();
    loader.addEventListener(LEvent.COMPLETE,loadbitmapdata);
    //加载一张图片,你可以替换为自己的图片
    loader.load("./images/backG.png",‘bitmapData‘);

}
function loadbitmapdata(event){
    //将图片转为bitmapdata对象,当然你也可以用一个纯色的色块来做试验
    //但是纯色色块的话,请注意LBitmapData("#ff0000",20,20,100,100)
    //得到的色块大小是80*80的,而如果是图片的话则是100*100的
    //具体为什么会有差异呢 请看引擎源码...
    var bmd = new LBitmapData(event.target,0,0,200,200);
    var bm = new LBitmap(bmd);
    var sp = new LSprite();

    //将我们要旋转或者缩放的目标按照如下进行位移
    //则该对象会将其内容的中心移到我们给其包裹对象LSprite的左上角
    bm.x = -bm.getWidth()*0.5;
    bm.y = -bm.getHeight()*0.5;
    //包裹目标对象的层可以设置任何一点为最终的缩放旋转中心
    //此处设置为整个画布的中心
    sp.x = LGlobal.width/2;
    sp.y = LGlobal.height/2;
    //添加进Canvas
    sp.addChild(bm);
    addChild(sp);
    //做一个动画来观看实际效果
    var i=0,j=1;
    setInterval(function(){
        sp.rotate = i++;
        sp.scaleX += 0.01;
        sp.scaleY += 0.01;
    },50)
    //再画一个圆心来作为参照
    var ppp = new LSprite();
    ppp.graphics.drawArc(1,"#000000",[300, 240, 10, 0, 2*Math.PI], true);
    addChild(ppp);
}
    </script>
</body>
</html>

其实上面的东西,引擎作者Lufy已经在这里讲明白了:关于对象的旋转中心和缩放中心的设置

因为其中的内容图片不知道是什么原因(服务器在日本),没有显示出来,而且Lufy的例子写得也太麻烦了,反倒不容易看清楚为什么...

所以将这个原理写在这里,仅供小伙伴们参考!o(∩_∩)o

最后再恭喜Lufylegend HTML5游戏引擎刚刚发布新版本:1.9.11

时间: 2024-10-14 06:54:55

在Lufylegend中如何设置bitmap或者sprite的缩放和旋转中心的相关文章

Android中常用的bitmap处理方法

收集了很多bitmap相关的处理方法,几乎全部应用在项目中,所以特记录下! package com.tmacsky.utils; import java.io.ByteArrayOutputStream; import java.io.IOException; import android.content.Context; import android.content.res.Resources; import android.graphics.Bitmap; import android.gr

unity3d之从3ds max导入素材到unity中的设置

我们制造一个子弹的模型 1 首先设置3d max中参数,设置Customize->Units Setup Metic为厘米 2 建模,这里我们使用plane,一个平面,如图 3 然后导出 4 unity中模型设置,如图 在这里有个参数Scale Factor,这个参数很重要,设置小了,导致在unity里面可能看不到,大了又不合适. 5 创建一个material 6 创建一个shader,把这个shader赋值给刚才创建的material 这里的shader代码如下 Shader "Angr

linux中怎样设置dhcpd

linux中怎样设置DHCP 在 linux 以下设置 DHCP一点也不复杂﹐您全部要做的仅仅有一个文件﹕/etc/dhcpd.conf . 以下﹐我用我自己的设置文件来说说怎么改动这个文件﹕ default-lease-time 259200; max-lease-time 777600; option domain-name "siyongc"; 这几行我放在文件的开头部份.第一和第二行我定义出租约的预设期限和最高期限﹐ 数值以秒来计算﹐也就是'三天'和'九天'. 然后我指定了网络

JAVA中如何设置代理服务器,取消代理服务器

1.简介 代理服务器(Proxy Server)是一种重要的服务器安全功能,它的工作主要在开放系统互联(OSI)模型的会话层,从而起到防火墙的作用.代理服务器大多被用来连接INTERNET(国际互联网)和INTRANET(局域网).主要功能:就是代理网络用户去取得网络信息.形象的说,它是网络信息的中转站.本文主要介绍如何使用java代码设置代理服务器. 主服务器为了防止被伪用户攻击,统一让用户通过代理服务器去访问主服务器,这样做的安全性是显而易见的.一个图理解代理服务器及作用 2.使用 在JAV

jsp中如何设置使用FCKeditor(转自CSDN)

FCKeditor这个在线HTML编辑工具具说是一个不错的东西,速度快而且稳定,而且还是开源的.以前我一直在写ASP代码,所以都是用的国产的eWebEditor.现在写JSP代码,所以就用到FCKeditor了.网上很多文章介绍它都是ASP程序的,现在我把它如何加入JSP的方法,写出来 先去下载一个FCKeditor,我下的是2.3版.再下一个FCKeditor.java 2.3 (FCKeditot for java) 这个文件就是用来让它支持JSP的.这里面还有一个东西,要下,就是xalan

深度分析:Android中Mms设置页面更改短信中心号码流程

相关控件初始化方法:showSmscPref private void showSmscPref() { int count = MSimTelephonyManager.getDefault().getPhoneCount(); boolean airplaneModeOn = Settings.System.getInt(getContentResolver(), Settings.System.AIRPLANE_MODE_ON, 0) != 0; for (int i = 0; i < c

控制面板中java设置项如何删除

卸载jdk或者jre后,如果控制面板中仍然有java项,重新安装可能仍然无法设置,提示找不到"javacpl.exe" 解决办法:删除C:\windows\system32\下的java*.cpl,删除即可. 控制面板中java设置项如何删除,布布扣,bubuko.com

SSIS变量属性中EvaluateAsExpression设置的作用

我们在做SqlServer SSIS包开发的时候,经常会用到SSIS的变量,我们可以使用和修改SSIS变量的值使得SSIS包的逻辑更灵活,如下图所示: 在定义SSIS变量的时候可以使用固定值(如上图中的变量Number),也可以是使用表达式(如上图中的变量Sql),使用表达式的时候可以让变量去使用另一个变量的值,比如下图是变量Sql的表达式,其中就使用了变量Number的值: 顺便说一下,本文上面的截图都是基于SqlServer2012的SSIS包,也就是VisualStudio 2010的SS

Linux中如何设置服务自启动?

转自:Linux中如何设置服务自启动? 有时候我们需要Linux系统在开机的时候自动加载某些脚本或系统服务,主要用三种方式进行这一操作: ln -s             在/etc/rc.d/rc*.d目录中建立/etc/init.d/服务的软链接(*代表0-6七个运行级别之一) chkonfig          命令行运行级别设置 ntsysv            伪图形运行级别设置 注意: 这三种方式主要用于以redhat为基础的发行版 如果还不知道运行级别是什么,那么最好先看看相关