Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/105.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios Adobe AIR Stage.ContentsCalefactor在iPhone4s和iPad mini上始终为1_Ios_Actionscript 3_Flash_Air - Fatal编程技术网

Ios Adobe AIR Stage.ContentsCalefactor在iPhone4s和iPad mini上始终为1

Ios Adobe AIR Stage.ContentsCalefactor在iPhone4s和iPad mini上始终为1,ios,actionscript-3,flash,air,Ios,Actionscript 3,Flash,Air,我的应用程序只是FlashDevelop:application.xml文件中的一个AIR Mobile AS3项目模板和一个主类 在Main类中,我创建了一个带有stage.contentsCalefactor值的文本字段,作为第一个事件之后的文本。调整大小: var textField:TextField = new TextField(); textField.appendText("Size: " + stage.stageWidth + " x " + stage.stageHeigh

我的应用程序只是FlashDevelop:application.xml文件中的一个AIR Mobile AS3项目模板和一个主类

在Main类中,我创建了一个带有
stage.contentsCalefactor
值的文本字段,作为第一个
事件之后的文本。调整大小

var textField:TextField = new TextField();
textField.appendText("Size: " + stage.stageWidth + " x " + stage.stageHeight + "\n");
textField.appendText("Scale: " + stage.contentsScaleFactor + "\n");
addChild(textField);
在支持视网膜的iPhone上,我可以

尺寸:960 x 640

比例:1

为了

configureBackBuffer
wantsBestResolution
设置为
true
,我仍然可以在iPad上获得1024*768的缓冲区。我通过在128*128四元网格上绘制清晰的256*256纹理验证了这一点——结果是模糊的。然后我也在做同样的事情

<requestedDisplayResolution>high</requestedDisplayResolution>
我得到了同样大小的清晰图像

我的实际问题是:

  • iPad/iPhone上的
    contentsCalefactor
    应该是2吗?如果是这样,我是否缺少一些编译器/打包程序选项
  • 我如何确定我的阶段是否已缩放
  • 如果
    contentsCalefactor
    在移动设备上不起作用,该属性的用途是什么?例如,它应该在带有视网膜显示器的Mac上工作吗
编辑2:


在带有视网膜显示器的Mac上,
contentsCalefactor
工作正常,报告
2

使用Capability.screenDPI要获得DPI比率,请将stage.stageWidth除以screenDPI。在Ipad上,你可以得到大约8个(一个DPI单位=大约2个手指的不动产),DPI可以提供你的密度。现在比较一下,非视网膜Ipad=8 DPI,132像素/DPI,视网膜Ipad=8 DPI,264像素/DPI(高清),等等…

来自评论:


是的,我现在在IOS设备上就是这样做的,但不幸的是, Capability.screenDPI通常不可靠。它总是开着 桌面,android上的一些“随机”值,不考虑 帐户当前监视器DPI

也许你需要的不是那么多,而是你在寻找的? DPI在纸张上作为墨点打印时适用PPI表示实际英寸的像素数。别担心,甚至维基百科的文章也承认“……将PPI称为DPI已经司空见惯,尽管PPI指的是输入分辨率”(现在我们知道DPI是打印分辨率

这意味着您应该忘记
功能.screenDPI
,而是开始在计算中包含
功能.screenResolutionX
(显示宽度)和
功能.screenResolutionY
(显示高度)数字

下面是一些反馈代码。希望它在某种程度上对你有用:
PS:用尺子对着电脑屏幕仔细检查闪光痕迹

var scrn_W : uint = Capabilities.screenResolutionX;
var scrn_H : uint = Capabilities.screenResolutionY;
var scrn_DPI : uint = Capabilities.screenDPI;

var init_stageW : int = stage.stageWidth; var init_stageH : int = stage.stageHeight;

//Diagonal in Pixels
var scrn_Dg_Pix : Number = int( Math.sqrt( scrn_W * scrn_W + scrn_H * scrn_H ) );

//Diagonal in Inches
var scrn_Diag : Number = int( Math.sqrt( scrn_W * scrn_W + scrn_H * scrn_H ) ) / 100;

var scrn_PPI : uint = int( Math.sqrt( scrn_W * scrn_W + scrn_H * scrn_H ) ) / scrn_Diag;
//or scrn_PPI = scrn_Dg_Pix / scrn_Diag; //gives same result as above line of code

var dot_Pitch : Number = scrn_W / ( Math.sqrt( scrn_W * scrn_W + scrn_H * scrn_H ) ) / (scrn_Diag * 25.4) / scrn_W;

var scrn_Inch_W : Number = ( scrn_W / scrn_PPI ); var scrn_Inch_H : Number = ( scrn_H / scrn_PPI );

var result_Num : Number = 0; var temp_Pix_Num:Number = 0;
var testInch : Number = 0; var my_PixWidth : Number = 0; 

stage.scaleMode = StageScaleMode.NO_SCALE;
stage.align = StageAlign.TOP_LEFT;
stage.addEventListener(Event.RESIZE, resizeListener);  //just in case 


////////////////////
//// FUNCTIONS

function inch_toPixels( in_Num : Number) : Number
{
    temp_Pix_Num = in_Num;
    result_Num = scrn_PPI * temp_Pix_Num;
    return result_Num; 
}

function pixels_toInch( in_Num : Number) : Number
{
    temp_Pix_Num = in_Num;  
    result_Num =  temp_Pix_Num / scrn_PPI;
    return result_Num; 
}

function cm_toInch( in_CM : Number) : Number
{
    //inch = cm * 0.393700787; //from centimetre to inch
    result_Num = in_CM * 0.393700787; return result_Num; 
}

function inch_toCM( in_Inch : Number) : Number
{
    //cm = inch * 2.54; //from inch to centimetre
    result_Num = in_Inch * 2.54; return result_Num;
}


function resizeListener (e:Event):void 
{ 
    // Handle Stage resize here (ie. app window's Scale Drag / Minimize etc)
    //trace("new stageWidth: " + stage.stageWidth + " new stageHeight: " + stage.stageHeight);
}

///////////////
//// TRACES

trace("Stage Init Width  : " + init_stageW);
trace("Stage Init Height : " + init_stageH);

trace("Screen Width     : " + scrn_W);
trace("Screen Height    : " + scrn_H);
trace("Screen DPI       : " + scrn_DPI);
trace("Screen PPI       : " + scrn_PPI);

trace("Screen Diag      : " + scrn_Diag);
trace("Screen Diag Pix  : " + scrn_Dg_Pix);

trace("Dot Pitch        : " + dot_Pitch);
trace("Disp Width (inches)  : " + scrn_Inch_W );
trace("Disp Height (inches) : " + scrn_Inch_H );

如何利用来计算实际的比例因子?

是的,这就是我现在对IOS设备所做的,但不幸的是,Capability.screenDPI通常不可靠。桌面上总是72,android上有些“随机”值,并且没有考虑当前监视器DPI,其中stage正在运行(stage.ContentsCalefactor被记录下来,因为它应该报告这样的事情)。这些值并不像你们在android上说的那个样随机,无论是从Flash还是本机,对于HD设备,这些值都将始终是HD,等等。。。这才是最重要的。我有480*320安卓手机,240 dpi,如Capability.screenDPI所示。另外一款800*480的手机也有240 dpi,屏幕大小几乎相同。此外,HD和hidpi是不同的概念-我需要确定,对于给定的屏幕分辨率,比如说1000,我应该呈现10*100px列表项,还是5*200px列表项用于hidpi。您需要确定DPI值的范围并分配类别。例如,在Flex上,高于320的任何内容都被视为hdpi,Flex只处理3个类别。如果愿意,您可以处理更多的类别,但不能将一打或任何一个dpi值作为自己的类别处理。要获得更准确的dpi,您可以使用本机编写一个ane,但在某些Android设备上(不是大多数设备,但会发生这种情况),dpi值仍将返回错误。谢谢,但我知道如何解决此问题。我想知道我的应用程序何时在视网膜显示器上运行。顺便说一句,这个解决方案在Android上也不起作用:我有两个屏幕尺寸相同(相差不到厘米的一小部分)的Fly设备,具有320*480和480*800
功能。分辨率
,两者都具有
功能。screenDPI=240
。我们使用DPI,因为这是问题所在的属性——screenDPI。屏幕DPI不工作。PPI和DPI完全相似。如果不知道某些东西的物理尺寸(像素或显示器),就无法获得DPI、PPI或任何物理测量值。你无法从设备中获得DPI。您可以计算出DPI,但设备并不能简单地将其提供给我们(出于某些奇怪的原因)。你的应用程序不应该扩展。缩放会杀死cpu。你可以自己在代码中扩展东西。不幸的是,我不能在我的项目中使用Flex。
<requestedDisplayResolution>standard</requestedDisplayResolution>
<requestedDisplayResolution>high</requestedDisplayResolution>
var scrn_W : uint = Capabilities.screenResolutionX;
var scrn_H : uint = Capabilities.screenResolutionY;
var scrn_DPI : uint = Capabilities.screenDPI;

var init_stageW : int = stage.stageWidth; var init_stageH : int = stage.stageHeight;

//Diagonal in Pixels
var scrn_Dg_Pix : Number = int( Math.sqrt( scrn_W * scrn_W + scrn_H * scrn_H ) );

//Diagonal in Inches
var scrn_Diag : Number = int( Math.sqrt( scrn_W * scrn_W + scrn_H * scrn_H ) ) / 100;

var scrn_PPI : uint = int( Math.sqrt( scrn_W * scrn_W + scrn_H * scrn_H ) ) / scrn_Diag;
//or scrn_PPI = scrn_Dg_Pix / scrn_Diag; //gives same result as above line of code

var dot_Pitch : Number = scrn_W / ( Math.sqrt( scrn_W * scrn_W + scrn_H * scrn_H ) ) / (scrn_Diag * 25.4) / scrn_W;

var scrn_Inch_W : Number = ( scrn_W / scrn_PPI ); var scrn_Inch_H : Number = ( scrn_H / scrn_PPI );

var result_Num : Number = 0; var temp_Pix_Num:Number = 0;
var testInch : Number = 0; var my_PixWidth : Number = 0; 

stage.scaleMode = StageScaleMode.NO_SCALE;
stage.align = StageAlign.TOP_LEFT;
stage.addEventListener(Event.RESIZE, resizeListener);  //just in case 


////////////////////
//// FUNCTIONS

function inch_toPixels( in_Num : Number) : Number
{
    temp_Pix_Num = in_Num;
    result_Num = scrn_PPI * temp_Pix_Num;
    return result_Num; 
}

function pixels_toInch( in_Num : Number) : Number
{
    temp_Pix_Num = in_Num;  
    result_Num =  temp_Pix_Num / scrn_PPI;
    return result_Num; 
}

function cm_toInch( in_CM : Number) : Number
{
    //inch = cm * 0.393700787; //from centimetre to inch
    result_Num = in_CM * 0.393700787; return result_Num; 
}

function inch_toCM( in_Inch : Number) : Number
{
    //cm = inch * 2.54; //from inch to centimetre
    result_Num = in_Inch * 2.54; return result_Num;
}


function resizeListener (e:Event):void 
{ 
    // Handle Stage resize here (ie. app window's Scale Drag / Minimize etc)
    //trace("new stageWidth: " + stage.stageWidth + " new stageHeight: " + stage.stageHeight);
}

///////////////
//// TRACES

trace("Stage Init Width  : " + init_stageW);
trace("Stage Init Height : " + init_stageH);

trace("Screen Width     : " + scrn_W);
trace("Screen Height    : " + scrn_H);
trace("Screen DPI       : " + scrn_DPI);
trace("Screen PPI       : " + scrn_PPI);

trace("Screen Diag      : " + scrn_Diag);
trace("Screen Diag Pix  : " + scrn_Dg_Pix);

trace("Dot Pitch        : " + dot_Pitch);
trace("Disp Width (inches)  : " + scrn_Inch_W );
trace("Disp Height (inches) : " + scrn_Inch_H );