Fork me on GitHub

不重复随机数列的生成即随机打乱一个数组的算法

Publish: December 11, 2014 Category: 未分类内容

假设一个长度为10的数组arr:

1,2,3,4,5,6,7,8,9,10

假设m=10
1、用系统随机函数得到一个小于m的随机数n
2、将arr[n]和数组最后一个元素即下标m-1所在的元素arr[m-1]交换,并将m减1
3、依次进行1、2这样的循环操作,直到m=0时终止操作

假设第 1 次操作后,倒数第 1 个和随机到的第 5 个元素交换:

»» 点击浏览全文 »»»»»»

关于汉堡包图标的一点收集

Publish: December 5, 2014 Category: 未分类内容

先留个坑,有时间了补上。。。
就是这个图标:
hamburger.gif

»» 点击浏览全文 »»»»»»

全球范围内的国家和城市数据库——各种不同语言

Publish: December 3, 2014 Category: 未分类内容

<CountryRegion Name="泰国" Code="THA">
<State>
  <City Name="安纳乍能" Code="37" />
  <City Name="巴蜀" Code="77" />
  <City Name="巴吞他尼" Code="13" />
  <City Name="巴真" Code="25" />
  <City Name="北碧" Code="71" />
  <City Name="北标" Code="19" />
  <City Name="北大年" Code="94" />
  <City Name="北揽" Code="11" />
  <City Name="北榄坡" Code="60" />
  <City Name="北柳" Code="24" />
  <City Name="碧差汶" Code="76" />
  <City Name="博达伦" Code="93" />
  <City Name="猜那" Code="18" />
  <City Name="猜也奔" Code="36" />
  <City Name="程逸" Code="53" />
  <City Name="春蓬" Code="86" />
  <City Name="春武里" Code="20" />
...

上面这段xml是从QQ安装目录的I18N下的2052目录找到的,文件名叫LocList.xml,其他语言如英语、法语,只需要安装一个国际版的QQ就找到了,低调低调,虽然这个是联合国的公开数据,不过我还是不要放上来了,我只能帮到这了。。

另外:怎么样在手机定位中找到国家、省份和城市?其实强大的Google就有这样的API:

提供经纬度(latlng参数),会返回识别到的的地址列表

https://maps.google.com/maps/api/geocode/json?latlng=22.538914,22.91479&language=zh-CN&sensor=true

也可以提供模糊地址(address参数)

https://maps.google.com/maps/api/geocode/json?address=台北101大厦&language=zh-CN&sensor=true

自己动手,浏览器打开上面地址试试看

Unity3D截屏

Publish: November 1, 2014 Category: 游戏开发

void OnClick ()
{
    StartCoroutine(CaptureScreen());
}

IEnumerator CaptureScreen()
{
    yield return new WaitForEndOfFrame();

    Texture2D t = new Texture2D(Screen.width, Screen.height);
    //截取的区域,使用像素空间坐标 (0,0)是屏幕左下角
    t.ReadPixels(new Rect(0, 0, Screen.width, Screen.height), 0, 0, false);
    t.Apply();
    //把纹理数据转换为PNG格式
    byte[] bytes = t.EncodeToPNG();
    //保存
    System.IO.File.WriteAllBytes(Application.dataPath + "/" + Time.time + ".png", bytes);
}

主要用到了Texture2D.ReadPixels这个API,看一下来自ceeger的API说明

Texture2D.ReadPixels 读取像素
function ReadPixels (source : Rect, destX :
int, destY : int, recalculateMipMaps : bool = true) : void

Read screen pixels into the saved texture data.

读取屏幕像素信息并存储为纹理数据

This will copy a rectangular pixel area from the currently active
RenderTexture or the view (specified by /source/) into the position
defined by destX and destY. Both coordinates use pixel space - (0,0)
is lower left.

这将从当前处于激活状态的 RenderTexture
或视图(由/source/指定)复制一个由destX和destY指定的矩形像素区域。这两个坐标使用像素空间坐标 (0,0)是屏幕左下角。

If recalculateMipMaps is set to true, the mip maps of the texture will
also be updated. If recalculateMipMaps is set to false, you must call
Apply to recalculate them.

如果 recalculateMipMaps 设置为真,这个贴图的mipmaps就会更新

如果 recalculateMipMaps设置为假,你需要调用Apply重新计算它们

This function works only on ARGB32 and RGB24 texture formats. The
texture also has to have Is Readable flag set in the import settings.

这个函数只工作在格式为ARGB32 和 RGB24纹理上,另外这个纹理的导入设置需要设置为 Is Readable(可读)

XCODE快速开发ANE步骤和一些常见错误的解决

Publish: September 5, 2014 Category: as3/flash

使用adobe air制作的移动应用,在对接第三方平台的时候,需要使用ANE来包装本机代码,在对接过程中,我积累了一些打包ANE的经验,记录下来,希望对看到的人有些帮助。
吐槽一下,ANE太难对付了,各种坑,调试也比较麻烦。

1、安装mac版本的AIR SDK
下载地址:http://www.adobe.com/devnet/air/air-sdk-download-mac.html

2、安装xcode的ANE项目模板(好东西~)
下载地址:https://github.com/divijkumar/xcode-template-ane

»» 点击浏览全文 »»»»»»

C#简单实现泛型数组QSort

Publish: September 1, 2014 Category: C#

Talk is cheap,show me the code

public class UIPanel
{
    public int depth;
}

public class Test
{
    /***************快速排序功能****************/
    public delegate int QSortCompareFunction<T>(T a,T b);
    public static void QSort<T>(T[] array,QSortCompareFunction<T> compareFunc)
    {
        //排序算法: 插入排序
        for(int i = 1; i < array.Length; i++)
        {  
            T t = array[i];  
            int j = i;
            while( (j>0) && compareFunc(array[j-1] , t) > 0 )
            {
                array[j] = array[j-1];
                --j;
            }
            array[j] = t;
        }
    }
    /************快速排序功能结束***************/

    static int UIPanelSortBy(UIPanel a,UIPanel b)
    {
        if(a.depth > b.depth)return 1;
        if(a.depth < b.depth)return -1;
        return 0;
    }

    static void PrintArray(UIPanel[] panels)
    {
        System.Console.Write("[");
        for(int i = 0; i < panels.Length; i++)
        {
            if(i != 0)System.Console.Write(",");
            System.Console.Write(panels[i].depth);
        }
        System.Console.Write("]\n");
    }

    static void Main(string[]args)
    {
        UIPanel[] panels = {
            new UIPanel(){depth = 6},new UIPanel(){depth = 2},new UIPanel(){depth = 1}
            ,new UIPanel(){depth = 4},new UIPanel(){depth = 5},new UIPanel(){depth = 3}
            ,new UIPanel(){depth = 2},new UIPanel(){depth = 5},new UIPanel(){depth = 7}
        };

        PrintArray(panels);

        QSort<UIPanel>(panels,UIPanelSortBy);

        PrintArray(panels);
    }
}

PNG2JPG——一种在保留透明度的前提下压缩PNG为JPG的工具

Publish: August 30, 2014 Category: project

工具名称:png压缩工具
使用说明:命令行方式使用,如:png2jpg.exe a.png b.png c.png
(或可直接拖动多个png到图标上)
---by yoyo(http://yoyo.play175.com)

png格式因为是无损压缩,所以文件相比于jpg格式会大很多,而jpg把对人眼不太敏感的像素去除,可以把图片压缩的很小,而jpg的缺陷就是没有alpha通道,不能作为半透明图片的存储格式。
我采用了网上广为流传的一种处理方式,那就是把RGB通道使用JPG压缩,然后再把alpha通道使用JPG压缩,放到一张2倍大小的图片里。
在使用时,代码中把RGB和alpha通道合起来,就得到了我们需要的半透明图片了。

未处理前PNG大小:8.36KB
1.png

处理后JPG大小:4.22KB
1_png.jpg

可以看到图片存储所需空间缩小了一倍,图片越大,压缩效果越明显。

下载地址:png2jpg.zip

JPG2PNG——jpg转png命令行工具

Publish: August 30, 2014 Category: project

工具名称:JPG转PNG工具(jpg2png.exe)
使用说明:命令行方式使用,如:jpg2png.exe a.png b.png c.png
(或可直接拖动多个文件到图标上)
---by yoyo(http://yoyo.play175.com)

这款工具可以去除jpg图片中的黑色背景,并以增加模式改善图片原有的通道亮度,在提取游戏中的特效资源中,这款工具非常有用。

转换前jpg图片:

jpg2png-1.jpg

转换后png图片:

jpg2png-2.jpg

下载地址:jpg2png.zip

ICO2PNG——ico图标转png图片小工具

Publish: August 30, 2014 Category: project

工具描述:ico转PNG工具(ico2png.exe)
使用说明:只支持命令行方式使用,如:ico2png.exe a.ico b.ico c.ico
(或可直接拖动多个文件到图标上)
---by yoyo(http://yoyo.play175.com)

可以把ico文件中的所有格式的图标转为png图片存储到ico文件所在的目录下,如下图所示:

ico2png.jpg

下载地址:ico2png.zip

adobe AIR iOS/Android app 设置不允许旋转屏幕

Publish: July 25, 2014 Category: as3/flash

代码如下:

stage.autoOrients = false;
stage.setOrientation(StageOrientation.ROTATED_LEFT);
stage.setAspectRatio(StageAspectRatio.LANDSCAPE);