`

Starling常见问题解决办法

 
阅读更多

Starling常见问题解决办法

来自:智慧 + 毅力 = 无所不能

 

1、Android设备上阻止用户按下后退后的行为

侦听按键事件

复制代码
//阻止后退行为
view.stage.addEventListener(KeyboardEvent.KEY_UP,keyboardHandler);
/**
* 当用户按下后退,强制程序关闭
*/       
protected function keyboardHandler(event:KeyboardEvent):void
{
        if(event.keyCode == Keyboard.BACK)
        {
                event.preventDefault();
                event.stopPropagation();
                NativeApplication.nativeApplication.exit();
        }
}
复制代码

 2、怎么让程序只能横着,不能竖着。但是可以翻转

首先在XML设置中,不要启动landscape模式,就是像下面这样注释掉就可以:

 

<!--<aspectRatio>landscape</aspectRatio>-->

然后打开允许自动翻转:

<autoOrients>true</autoOrients>

然后在应用启动之后,用代码设置为横屏模式:

stage.setOrientation(StageOrientation.ROTATED_LEFT);

然后侦听屏幕翻转事件,阻止不需要的模式:

复制代码
//only support landscape mode
stage.addEventListener(StageOrientationEvent.ORIENTATION_CHANGING, onOrientationChanging );
/**only support landscape mode*/
private function onOrientationChanging(event:StageOrientationEvent):void 
{
    // If the stage is about to move to an orientation we don't support, lets prevent it 
    // from changing to that stage orientation. 
    if(event.afterOrientation == StageOrientation.UPSIDE_DOWN || event.afterOrientation == StageOrientation.DEFAULT ) 
        event.preventDefault();
}
复制代码

Starling屏幕自适应方法
参考连接:
http://www.starlinglib.com/wiki/StarlingManual:%E5%A4%9A%E5%B1%8F%E5%B9%95%E5%88%86%E8%BE%A8%E7%8E%87%E7%9A%84%E5%BC%80%E5%8F%91
1>首先获得手机屏幕的宽高,也就是你要显示的范围的大小
//竖屏
//                private var screenWidth:int  = stage.fullScreenWidth;  
//                private var screenHeight:int = stage.fullScreenHeight;        
//横屏
        private var screenWidth:int  = stage.fullScreenHeight;  
        private var screenHeight:int = stage.fullScreenWidth;
注意的是横屏和竖屏宽高赋值要调转
2>获得1个长方形的显示空间的对象
private var viewPort:Rectangle = new Rectangle(0, 0, screenWidth, screenHeight)
把要显示的starling初始化时候把长方形对象插入到第三个参数
  myStarling = new Starling(MainGame,stage,viewPort);
设置starling中要显示画面的大小
                        myStarling.stage.stageWidth  = 480;
                  myStarling.stage.stageHeight = 320;
完成!

 

3、两个手机应用可以互相调用吗

在使用Adobe AIR进行移动应用开发的时候,我们或许会有这样的需求:假如我们开发的是两个应用(A和B),同时安装到手机上,那么能否在A中呼叫B并传递参数呢(或者反过来B操作后,再把参数返回给A)。

目前AIR还没有直接呼叫某个APP的API,但我们可以使用手机特有的特性来实现。可以使用ANE,借助原生代码来实现,也可以使用自定义的URI来实现。具体教程参见:

Adobe AIR研究小组:Adobe AIR移动App的互相调用实现方式

更新:在Adobe AIR 3.5 beta中已经原生添加了这个特性

4、AIR移动应用对图标尺寸的要求是什么?

答:主要是看发布平台对图标的尺寸要求,以目前应用最广泛的iOS和Android平台的要求为准,我们应该准备的图片尺寸是:

  • Android: 24*24,32*32,36*36,48*48,72*72
  • iOS: 29*29,48*48,57*57,58*58,72*72,96*96,114*114,144*144,512*512

5、AIR for iOS应用如何限定最低系统版本

答:如果您的应用使用到了最新的iOS系统才支持的功能,就必须在应用中做一些限定了,防止不符合条件要求的系统安装了应用而导致无法运行。

方式是在XML配置中增加:

<key>MinimumOSVersion</key>
<string>5.0.1</string>

6、Starling中如何裁切纹理

答:通过Image.setTexCoords()方法,可以改变四边形顶点对于的纹理的UV坐标(取值范围0-1),这样可以实现对纹理的一个矩形区域的裁切。比如我们只需要显示纹理右下方1/4的区域,可以这样设置:

复制代码
img.setTexCoords(0,new Point(0.5,0.5));
img.setTexCoords(1,new Point(1,0.5));
img.setTexCoords(2,new Point(0.5,1));
img.setTexCoords(3,new Point(1,1));
 
//TIPS: Starling中两个三角形组成一个四边形,而四边形的4个顶点的索引以及其位置是:
0 1
2 3
复制代码

7、如何在Starling中平铺图片?

答:设置texture.repeat为true,并且设置image的UV坐标。

代码示例:

复制代码
var birdTex:Texture = Texture.fromBitmap(new birdBMPClass() as Bitmap);
birdTex.repeat = true;
var bird:Image = new Image(birdTex);
bird.width = 960;
bird.height = 640;
bird.setTexCoords(1, new Point(bird.width/birdTex.width, 0));
bird.setTexCoords(2, new Point(0, bird.height/birdTex.height));
bird.setTexCoords(3, new Point(bird.width/birdTex.width, bird.height/birdTex.height));
addChild(bird);
复制代码

 

8、如何将多个纹理合并成一个纹理?

复制代码
/**
 * 克隆可视对象到一个图片
 * @param target    可视目标对象
 * @param persistent    指明纹理在经过多次绘制之后是否是持久的
 * @return 
 */        
public static function clone(target:DisplayObject, persistent:Boolean = false):Image
{
    if (!target)
    {
        return null;
    }
    var texture:RenderTexture = new RenderTexture(target.width, target.height, persistent);
    if (target is DisplayObjectContainer)
    {
        texture.drawBundled(function():void
        {
            var num:int = DisplayObjectContainer(target).numChildren;
            for (var i:int = 0; i < num; i++)
            {
                texture.draw(DisplayObjectContainer(target).getChildAt(i));
            }
        });
    }
    else
    {
        texture.draw(target);
    }
    return new Image(texture);
}
复制代码

 

9、如何解决Starling应用放大之后,图片之间的间隙?

答:这可能是Stage3D在纹理取样时的算法造成的。

方式1:使用TextureSmoothing.NONE。比如:

var image1:TestImage = new TestImage(sAssets.getTexture("test"));
image1.smoothing = TextureSmoothing.NONE;

方式2:设置图像显示区域的偏移量,来避免这个问题:

复制代码
package
{
    import starling.display.Image;
    import starling.textures.Texture;
    import flash.geom.Point;
    import flash.utils.setTimeout;
 
    /**
     * 根据缩放,自动调整尺寸的Image
     */    
    public class TestImage extends Image
    {
        public static var offset:Number = 0;
 
        public function TestImage(texture:Texture)
        {
            super(texture);
            if(offset>0)
            {
                setPositions();
            }
        }
 
        private function setPositions():void
        {
            var w:Number = super.width+offset;
            var h:Number = super.height+offset;
            mVertexData.setPosition(0,0-offset,0-offset);
            mVertexData.setPosition(1,w,0-offset);
            mVertexData.setPosition(2,0-offset,h);
            mVertexData.setPosition(3,w,h);
        }
 
        /**@override*/
        override public function readjustSize():void
        {
            super.readjustSize();
            setPositions();
        }
        /**@override*/
        override public function setTexCoords(vertexID:int, coords:Point):void
        {
            super.setTexCoords(vertexID,coords);
            setPositions();
        }
        /**@override*/
        override public function set width(value:Number):void
        {
            super.width = value;
            setTimeout(setPositions,1);
        }
        /**@override*/
        override public function set height(value:Number):void
        {
            super.height = value;
            setTimeout(setPositions,1);
        }
 
    }
}
复制代码
// 使用
if(viewPort.width>stageWidth)
    TestImage.offset = 1;

 

分享到:
评论

相关推荐

    Away3D 4.0.9 CHM 参考文件

    开发者可以通过查阅此文档,快速定位到所需的功能,理解如何使用新特性,以及解决在开发过程中遇到的问题。 总之,《Away3D 4.0.9 CHM 参考文件》是Away3D开发者不可或缺的资源,它详细阐述了如何利用Stage3D和...

    scout帮助文档

    - **用户体验优先**:允许开发者在最终用户的运行环境中进行实时分析,有助于更快地识别并解决性能问题,提升用户体验。 #### 二、Adobe Scout的工作原理 - **Telemetry技术**:Adobe Scout依赖于Telemetry技术,...

    AS3-DisplayEffect组件

    同时,它还可以与ActionScript的其他库,如Starling(用于2D游戏开发的高性能库)配合,实现更复杂的视觉体验。 6. **实战应用**: 通过DisplayEffect,开发者可以轻松地为网站、游戏、互动广告等项目添加丰富的...

    大型并发系统整理版

    本篇文章将根据给定文件中的内容,深入探讨高并发系统设计中的一些关键技术点,包括缓存策略、性能优化方法以及具体的技术选型。 #### 二、缓存的重要性 在高并发系统的设计中,缓存是至关重要的。正如Cal ...

    亚洲电子商务发展案例研究

    本书由国际发展研究中心(IDRC)和东南亚研究院(ISEAS)联合出版,旨在探讨亚洲背景下电子商务的发展与实践。IDRC自1970年起,致力于通过科学技术解决发展中国家的社会、经济和环境问题。书中详细介绍了IDRC的ICT4D项目,以及如何通过项目如Acacia、泛亚网络和泛美项目,在非洲、亚洲和拉丁美洲推动信息通信技术(ICTs)的影响力。特别强调了IDRC在弥合数字鸿沟方面所作出的贡献,如美洲连通性研究所和非洲连通性项目。ISEAS作为东南亚区域研究中心,专注于研究该地区的发展趋势,其出版物广泛传播东南亚的研究成果。本书还收录了电子商务在亚洲不同国家的具体案例研究,包括小型工匠和开发组织的电子商务行动研究、通过互联网直接营销手工艺品、电子营销人员的创新方法以及越南电子商务发展的政策影响。

    少儿编程scratch项目源代码文件案例素材-Leap On.zip

    少儿编程scratch项目源代码文件案例素材-Leap On.zip

    ANSYS Maxwell电磁仿真在高速无刷电机设计中的应用与优化技巧

    内容概要:本文详细介绍了ANSYS Maxwell电磁仿真软件在高速无刷电机(特别是吸尘器电机)设计中的应用。主要内容涵盖电机设计中的常见挑战及其解决方案,如定子槽开口设计、气隙磁密控制、Halbach阵列的应用、定子斜槽角度选择、散热设计以及PWM控制策略等。文中通过具体实例展示了如何利用Maxwell进行参数化扫描、瞬态场仿真、温度场耦合仿真等操作,从而优化电机性能并提高效率。此外,还讨论了仿真与实际情况之间的差异及应对措施。 适合人群:从事电机设计、电磁仿真及相关领域的工程师和技术人员。 使用场景及目标:适用于希望深入了解高速无刷电机设计原理及优化方法的专业人士。目标是在实际项目中运用Maxwell电磁仿真工具,解决设计难题,提升产品性能。 其他说明:文章强调了仿真并非万能,但合理的仿真手段能够极大促进产品研发进程。文中提供了多个实用的Python和MATLAB脚本示例,帮助读者更好地理解和应用相关技术。

    Java多态的一些小知识点

    这是我记录的第一篇笔记和博客,我现在大一下,我想以此为契机激励自己记笔记,加深对特定知识的印象!目前我在学习黑马的Java,同时期也会学一些数据结构和相关算法,我也会将这部分笔记上传。最后我想说的是一些最近的感想 1.不要美化你没走过的路 2.来都来了那就坚持走下去,不给自己留遗憾!!

    Matlab构建双输入深度学习模型:融合时序与频域特征的技术指南

    内容概要:本文详细介绍了如何利用Matlab构建并训练双输入深度学习模型,特别是针对不同长度的一维序列数据(如时序信号及其FFT频谱)。首先,作者展示了如何生成用于实验的仿真数据,接着深入探讨了网络架构的设计思路,包括采用CNN-LSTM处理时序特征以及纯CNN提取频域特征的方式。文中强调了数据预处理的重要性,如归一化处理,并提供了具体的训练选项设置方法。此外,还分享了一些实用的小贴士,如如何正确地进行模型评估和调整网络结构以适应不同的应用场景。最后,作者提到了一些常见的错误及解决办法,帮助读者避开潜在的陷阱。 适合人群:对深度学习感兴趣的科研工作者、研究生及以上水平的学生,尤其是那些希望将理论应用于实践的人群。 使用场景及目标:适用于需要同时处理多种类型数据的研究项目,如机械故障诊断、情感分析等领域。通过本教程的学习,读者能够掌握构建高效双输入深度学习模型的方法,从而提高数据分析的效果。 其他说明:本文不仅提供完整的代码示例,还包括了许多实践经验分享,有助于初学者更好地理解和应用所学知识。

    基于COMSOL的三相电力变压器温度场与流体场耦合计算模型及其实现技巧

    内容概要:本文详细介绍了使用COMSOL进行三相电力变压器温度场与流体场耦合计算的具体步骤和技术要点。首先讨论了变压器温升问题的重要性和现有仿真与实测数据之间的偏差,接着阐述了电磁-热-流三场耦合建模的难点及其解决方法。文中提供了关键的材料属性设置代码,如变压器油的密度和粘度随温度变化的关系表达式,并强调了网格划分、求解器配置以及后处理阶段需要注意的技术细节。此外,还分享了一些实用的经验和技巧,例如采用分离式步进求解策略、优化网格划分方式等,确保模型能够顺利收敛并获得精确的结果。最后,作者推荐了几种常用的湍流模型,并给出了具体的参数设置建议。 适用人群:从事电力系统设计、变压器制造及相关领域的工程师和技术人员,特别是那些希望深入了解COMSOL软件在复杂多物理场耦合计算方面应用的人群。 使用场景及目标:适用于需要对变压器内部温度分布和油流情况进行精确模拟的研究或工程项目。主要目的是提高仿真精度,使仿真结果更加贴近实际情况,从而指导产品设计和优化运行参数。 其他说明:文中不仅包含了详细的理论解释和技术指导,还提供了一些实际案例供读者参考。对于初学者来说,可以从简单的单相变压器开始练习,逐步掌握复杂的三相变压器建模技能。同时,作者提醒读者要注意单位的一致性和材料属性的准确性,这是避免许多常见错误的关键所在。

    PSD信号处理电路(PCB 原理图 封装库)亲测可用.zip

    PSD信号处理电路(PCB 原理图 封装库)亲测可用.zip

    少儿编程scratch项目源代码文件案例素材-3D游戏.zip

    少儿编程scratch项目源代码文件案例素材-3D游戏.zip

    信号分析+频率分析+频率合成+外部信号输入+光学分析

    信号分析,可导入外部信号文件 分析信号合成频率。 也可设置信号频率合成信号源。 信号合成,可导入外部频率文件 合成信号数据。也可调整频率数值合成信号源。 应用于通信领域, 光学领域,声波领域,信号和频率通过图形进行展示,所见所得,

    少儿编程scratch项目源代码文件案例素材-3D 汽车.zip

    少儿编程scratch项目源代码文件案例素材-3D 汽车.zip

    永磁同步电机FOC控制四种方法模型及Simulink仿真实践

    内容概要:本文详细介绍了永磁同步电机(PMSM)基于磁场定向控制(FOC)的四种不同控制策略及其Simulink仿真模型。首先,经典双闭环PI控制提供了稳定的基础控制方式,适用于大多数应用场景。其次,电流滞环控制采用Bang-Bang控制策略,虽然响应速度快但能耗较高。第三种方法是滑模转速控制,利用非线性切换函数提高系统的抗扰动能力,但在稳态时存在轻微抖振。最后,PR控制在静止坐标系上实现了高精度的电流跟踪,特别适合固定频率应用。每种控制方法都有详细的参数设定和仿真波形展示,帮助读者深入理解各控制策略的特点和适用范围。 适合人群:从事电机控制系统研究与开发的技术人员,尤其是有一定MATLAB/Simulink基础的研发人员。 使用场景及目标:①掌握永磁同步电机FOC控制的基本原理和技术细节;②通过具体实例和仿真模型验证不同控制策略的效果;③选择最适合特定应用场景的控制方法并进行优化。 其他说明:文中还提到了一些实用技巧,如参数调整的经验法则、常见问题的解决方案以及仿真环境配置注意事项。附带的参考文献有助于进一步深入了解相关理论背景。

    基于模型预测控制(MPC)的无人艇分布式编队协同控制仿真与实现

    内容概要:本文详细介绍了利用模型预测控制(MPC)实现无人艇分布式编队协同控制的方法和技术。首先,通过简化的动力学模型和MATLAB代码展示了无人艇的基本行为预测。接着,深入探讨了编队协同控制的关键要素,包括代价函数的设计、信息交换机制以及分布式MPC的具体实现步骤。文中还提供了具体的Python代码示例,涵盖了从单个无人艇的动力学建模到多智能体之间的协作控制。此外,作者分享了一些实用技巧,如如何处理通信延迟、传感器噪声等问题,并展示了仿真效果,证明了所提出方法的有效性和鲁棒性。 适合人群:对无人艇编队控制、模型预测控制(MPC)、分布式系统感兴趣的科研人员、工程师及高校学生。 使用场景及目标:适用于研究和开发无人艇编队控制系统,特别是希望通过分布式控制实现高效、灵活的编队任务。目标是在复杂的海洋环境中,使无人艇能够自主完成编队、跟踪指定路径并应对各种干扰因素。 其他说明:文中提供的代码片段和理论解释有助于理解和实现无人艇编队控制的实际应用。建议读者在实验过程中结合实际情况进行参数调整和优化。

    220V转12V工业电源设计方案详解:6W与12W高效低成本电路设计及认证要点

    内容概要:本文详细介绍了两种成熟的220V转12V工业电源设计方案,分别是6W和12W的反激式电源设计。文中不仅提供了详细的电路设计参数,如变压器绕制方法、元件选择、PCB布局技巧,还分享了许多实用的经验和技术细节,确保设计方案能够顺利通过相关认证。同时,文章对比了两种方案的成本和性能差异,帮助读者在实际应用中做出合适的选择。 适合人群:从事电源设计的工程师,尤其是对220V转12V工业电源设计感兴趣的初学者和有一定经验的研发人员。 使用场景及目标:适用于需要将220V交流电转换为12V直流电的应用场合,如工业设备、智能家居、医疗设备等。目标是提供高效、稳定且成本可控的电源解决方案。 其他说明:文章强调了变压器设计和EMI测试中的注意事项,以及如何在保证性能的前提下降低成本。此外,还提到了一些常见的认证问题及其解决办法。

    能源领域中基于储能电站服务的冷热微网系统双层优化模型及其应用

    内容概要:本文探讨了基于储能电站服务的冷热微网系统双层优化模型,旨在解决储能配置和运行调度在不同时间尺度下的优化问题。文中首先介绍了双层规划模型的构建,上层负责长时间尺度的储能配置,涉及储能系统的容量、充放电功率等关键参数;下层则专注于短时间尺度的微网优化运行,涵盖太阳能、风力发电等能源设备的功率输出。接着,文章阐述了如何通过KKT条件将双层模型转化为单层模型,并使用大M法将其线性化处理,以便于求解。最后,通过使用Gurobi等求解器进行求解,实现了储能系统的优化配置和高效运行。 适合人群:从事能源领域的研究人员和技术人员,尤其是对储能系统和微网优化感兴趣的读者。 使用场景及目标:适用于需要优化储能配置和微网运行的企业或研究机构,目标是提高能源利用效率,降低成本,促进可持续能源的发展。 其他说明:文章提供了详细的Python代码示例,帮助读者理解和实现双层优化模型的具体步骤。此外,还讨论了一些实际应用中的注意事项,如大M值的选择和求解器的配置等。

    永磁同步电机MTPA与弱磁控制的MATLAB/Simulink仿真建模及优化

    内容概要:本文介绍了永磁同步电机(PMSM)的最大转矩电流比(MTPA)控制和弱磁控制的MATLAB/Simulink仿真模型及其设计原理。首先阐述了这两种控制方式的背景和技术意义,接着详细解释了MTPA控制和弱磁控制的具体实现方法,包括关键公式和代码片段。然后展示了如何在Simulink中构建完整的仿真模型,涵盖各个控制模块的搭建,如电流环、速度环的PI调节器等。最后通过仿真结果分析验证了所提出的控制策略的有效性和优越性。 适合人群:从事电机控制系统研究的技术人员、高校相关专业师生、对永磁同步电机控制感兴趣的工程技术人员。 使用场景及目标:适用于需要深入了解并掌握永磁同步电机高性能控制技术的研究人员,帮助他们理解和实现高效的电机控制策略,特别是在工业自动化、电动汽车等领域。 其他说明:文中提供了详细的代码示例和仿真波形图,有助于读者更好地理解和复现实验结果。同时指出了调试过程中可能遇到的问题及解决方案,便于初学者避免常见错误。

    基于Matlab/Simulink的异步电机V/F开环与转差频率闭环调速系统仿真

    内容概要:本文详细介绍了利用Matlab/Simulink进行异步电机调速仿真的具体实现方法。首先探讨了最经典的恒压频比(V/F)开环控制系统,通过设置三相电源模块、V/F控制器和SVPWM逆变器,实现了电压和频率的线性增长,展示了开环系统在不同负载情况下的性能特点。接着引入了更为复杂的转差频率闭环控制方案,通过加入转速外环和转差频率内环,以及PID调节器,显著提高了系统的稳定性,特别是在负载突变时的表现。最后讨论了SVPWM控制的优势,强调其在改善电压波形质量和降低谐波方面的优越性。 适合人群:从事电机控制领域的研究人员和技术人员,尤其是有一定Matlab/Simulink基础的工程师。 使用场景及目标:适用于需要深入了解异步电机调速原理和仿真实现的研究项目。主要目标是掌握V/F开环和转差频率闭环两种控制方式的具体实现步骤,理解各自的特点和应用场景,同时学会优化系统参数以提高性能。 其他说明:文中提供了详细的代码片段和仿真技巧,帮助读者更好地理解和应用相关理论。建议读者在实践中结合实际硬件参数进行调整,确保仿真结果的准确性。

Global site tag (gtag.js) - Google Analytics