已购BD列表

电影

你的名字
声之形
颠倒的帕特玛
疯狂动物城
哈利波特全集
秒速五厘米
言叶之庭
千与千寻的神隐
风之谷
天空之城
阿凡达
盗梦空间
最终幻想15 王国之剑
最终幻想15 兄弟情
偶像大师剧场版

番剧

可塑性记忆
月色真美
埃罗芒阿老师
我的妹妹哪有这么可爱
偶像大师
珈百璃的堕落
变态王子与不笑猫
缘之空
机巧少女不会受伤

初音未来演唱会

2010 39'S感谢祭
2012最后的感谢祭
2013横滨
2014大阪
2015武道馆
2016魔法未来

安卓AMR录音文件音量放大

public class AmrUtil {
	private static final int amrEncodeMode[] = { 4750, 5150, 5900, 6700, 7400, 7950, 10200, 12200 }; // amr 编码方式
	private static final int AMR_FRAME_COUNT_PER_SECOND = 50;
	private static int mMode = 0;

	public static void change(String inPath, String outPath) {
		File inFile = new File(inPath);
		File outFile = new File(outPath);
		if (!inFile.exists()) {
			return;
		}
		try {
			outFile.deleteOnExit();
			outFile.createNewFile();

			FileInputStream in = new FileInputStream(inFile);
			FileOutputStream out = new FileOutputStream(outFile);

			byte[] amrhead = new byte[6];// amr head 6 bytes

			in.read(amrhead);
			out.write(amrhead);

			byte[] amrframehead = new byte[1];// amr frame head 1 bytes
			in.read(amrframehead);
			out.write(amrframehead);

			int frameSize = caclAMRFrameSize(amrframehead[0]);
			byte[] amrframecontent = new byte[frameSize - 1];// amr frame content frameSize - 1 bytes
			in.read(amrframecontent);
			out.write(amrframecontent);

			byte[] amrframe = new byte[frameSize];// amr frame frameSize bytes
			short[] pcmframe = new short[160];// pcm frame 160 shorts

			long state = AmrDecoder.init();
			AmrEncoder.init(0);

			while (in.read(amrframe) != -1) {
				AmrDecoder.decode(state, amrframe, pcmframe);
				int pcmval;
				for (int i = 0; i < pcmframe.length; i++) {
					// 音量调节
					pcmval = pcmframe[i] * 3;
					if (pcmval < 32767 && pcmval > -32768) {
						pcmframe[i] = (short) pcmval;
					} else if (pcmval > 32767) {
						pcmframe[i] = 32767;
					} else if (pcmval < -32768) { pcmframe[i] = -32768; } } AmrEncoder.encode(mMode, pcmframe, amrframe); out.write(amrframe); } in.close(); out.flush(); out.close(); } catch (IOException e) { e.printStackTrace(); } } // 根据帧头计算当前帧大小 private static int caclAMRFrameSize(byte frameHeader) { int mode; int temp1 = 0; int temp2 = 0; int frameSize; temp1 = frameHeader; // 编码方式编号 = 帧头的3-6位 temp1 &= 0x78; // 0111-1000 temp1 >>= 3;
		
		mMode = temp1;
		mode = amrEncodeMode[temp1];

		// 计算amr音频数据帧大小
		// 原理: amr 一帧对应20ms,那么一秒有50帧的音频数据
		temp2 = myround((double) (((double) mode / (double) AMR_FRAME_COUNT_PER_SECOND) / (double) 8));

		frameSize = myround((double) temp2 + 0.5);
		return frameSize;
	}

	private static int myround(double x) {
		return ((int) (x + 0.5));
	}
}

参考:
1.AMR文件格式分析
2.opencore-amr-android

CocosCreator 微信分享屏幕截图(IOS+安卓)完整解决方案!

微信分享图片,对缩略图的大小是有要求的,笔者被这个坑的很惨。笔者开发的游戏分辨率为1280*720,安卓缩略图大小为128*72,IOS缩略图大小为256*144.

笔者直接贴代码了,详细的注释代码里面都有的。

JS部分

cc.Class({

    properties: {
        _isCapturing: false, // 正在截图中标志
    },

    // 微信分享屏幕截图
    shareScreenshot: function () {
        // 网页端不支持
        if (cc.sys.isBrowser) {
            cc.log('网页端不支持微信分享~');
            return;
        }

        // 正在截图中判断
        if (this._isCapturing) {
            return;
        }
        this._isCapturing = true;

        // 截图文件判断
        var fileName = "shareScreenshot.jpg";
        var fullPath = jsb.fileUtils.getWritablePath() + fileName;
        if (jsb.fileUtils.isFileExist(fullPath)) {
            jsb.fileUtils.removeFile(fullPath);
        }

        // 截图并保存图片文件
        var size = cc.director.getWinSize(); // 获取视图大小
        var texture = new cc.RenderTexture(size.width, size.height); // 新建渲染纹理
        texture.setPosition(cc.p(size.width / 2, size.height / 2)); // 移动渲染纹理到视图中心
        texture.begin(); // 开始渲染
        cc.director.getRunningScene().visit(); // 访问当前场景
        texture.end(); // 渲染结束
        texture.saveToFile(fileName, cc.IMAGE_FORMAT_JPG); // 保存渲染纹理到图片文件

        // 延时50毫秒,检测截图文件是否存在
        // 重复10次这个过程,如果超过10次仍没检测到图片文件,截图失败(超时)
        var self = this;
        var tryTimes = 0;
        var fn = function () {
            if (jsb.fileUtils.isFileExist(fullPath)) {
                // 调用相应平台微信分享图片方法
                if (cc.sys.os === cc.sys.OS_ANDROID) {
                    jsb.reflection.callStaticMethod('org/cocos2dx/javascript/MyJsPlugin', 'shareIMG', '(Ljava/lang/String;)V', fullPath);
                } else if (cc.sys.os === cc.sys.OS_IOS) {
                    jsb.reflection.callStaticMethod('AppController', 'shareIMG:', fullPath);
                }
                self._isCapturing = false;
            } else {
                tryTimes++;
                if (tryTimes > 10) {
                    self._isCapturing = false;
                    cc.log('截图失败,超时~');
                    return;
                }
                setTimeout(fn, 50);
            }
        };
        setTimeout(fn, 50);
    },
});

安卓部分 继续阅读CocosCreator 微信分享屏幕截图(IOS+安卓)完整解决方案!

CocosCreator 打包安卓项目出现【dlopen failed: cannot locate symbol “rand” referenced by “libcocos2djs.so”】原因分析与解决方案!

首先,笔者使用的是最新的CocosCreator 1.5.1版本。开发环境是mac。

安装配置原生开发环境使用的是官网提供的教程

Cocos官网提供的安卓SDK包含三个版本的api,分别是10,20,22.

出现标题中的问题的原因是编译项目时选择了22的api。

解决方案很简单,编译项目时选择10的api就好了。

还有一个最简单的方法,CocosCreator 1.5.1版本已经提供了预编译库文件,选择模板的时候,选择binary就可以直接使用已经编译好的库文件了,这样速度会提高很多。

不过切换api的时候,别忘了把以前编译的东西删除掉。如果不知道删除啥,直接把当前项目下的build文件夹删除掉就可以了,这个是默认的发布路径。如果已经进行了安卓平台的开发的话,可以删除安卓项目目录下的obj文件夹。

PS:笔者特意测试了下,使用20版本的api也是可以编译成功的。不过这里的话,还是推荐使用10版本的api来进行编译。编译模板推荐使用binary,也就是使用预编译库文件,毕竟修改源码什么的,应该很少才对吧。如果想修改安卓api版本的话,可以先使用10版本的api编译出来,然后在安卓项目里面切换api版本,这样也不会有问题。

最后附上笔者打包发布的设置截图。

继续阅读CocosCreator 打包安卓项目出现【dlopen failed: cannot locate symbol “rand” referenced by “libcocos2djs.so”】原因分析与解决方案!

第一次

《我的妹妹才没有那么可爱》——入宅作,第一次追番,第一次知道二次元

《空陆》——第一次接触GALGAME,第一次接触国产GALGAME

《11eyes -罪与罚与赎的少女-》——第一次接触日本GALGAME,第一次接触R18游戏

Android多渠道打包工具–MoeApkTool(通过assets目录内文件来区分渠道)

该工具参考自:RyApkTool特在此表示感谢~

1.原理

已签名APK文件==>ShakaApktool解压APK文件==>添加MOE_CHANNEL文件到assets目录

==>ShakaApktool重新打包APK文件==>jarsigner签名

MOE_CHANNEL文件里的内容就是渠道信息

2.用法

将APK文件放入工具包文件夹

CD到文件夹所在目录:java -jar MoeApkTool.jar keyFile keyName keyPasswd

3.编辑渠道信息

编辑工具包文件夹下的info文件夹里的channel.txt文件,一行一个渠道号

4.在程序里使用

点我看如何在程序里获取渠道号

5.下载地址

点我下载工具包

点我下载源码

BKEngine学习笔记

1.常用全局变量

tf 临时全局变量
f 存档相关全局变量
sf 存档无关全局变量
global.xxx 不属于上面三个类型,不过类似于tf

补充一些TJS中的说明:

以 f. 开头的变量,为游戏变量。该类变量将随着进度存档被保存。这类变量用于和游戏进度相关的数据。

以 sf. 开头的是系统变量。该类变量将在系统存档中被自动保存,在正常且没有改动的情况下将一直保持。这类变量用于与系统设置及游戏全局变量相关的数据。

以 tf. 开头的是全局变量。该类变量不会被保存,一旦程序退出就将丢失,用于临时使用的数据。

以上这三类变量将在第一次使用时被自动声明。不需要单独的声明或者定义。

global 表示“全局”(global)这个对象。在所有的代码段之外声明的变量、类、不属于类的成员的函数等都可以通过这个对象来操作。

2.类继承

.类方法不支持重名

.构造子类时,会强制调用父类的构造方法,不可以手动调用

在创建对象时,推荐使用Create方法来创建对象。

详细例子:

##
class A{
    function Create(a){
        log("A:"+a);
        return this;
    }
}
class B extends A{
    function Create(a,b){
        super.Create(b);
        log("B:"+a+"_"+b)
        return this;
    }
}
var b = B().Create("a","b");
##

【转】RSA私钥及公钥生成

原文地址:支付宝开放平台 – RSA私钥及公钥生成

生成方式一(推荐):使用支付宝提供的一键生成工具(内附使用说明)

解压打开文件夹,直接运行“支付宝RAS密钥生成器SHAwithRSA1024_V1.0.bat”(WINDOWS)或“SHAwithRSA1024_V1.0.command”(MACOSX),点击“生成RSA密钥”,会自动生成公私钥,然后点击“打开文件位置”,即可找到工具自动生成的密钥。

生成方式二:也可以使用OpenSSL工具命令生成 继续阅读【转】RSA私钥及公钥生成

【转】Java应用打包后运行需要注意编码问题

本文转载自:http://blog.csdn.net/chaijunkun/article/details/7624338

文章针对作者原文略有修改,以下是正文。

最近在做一个项目,项目总的来说就是和数据库打交道,取出数据来通过HTTP协议提交到一个接口上去。具体功能不多说了,只是讲这里面的一点——编码问题
项目当中,涉及到取所有数据的MD5值。
在Java项目中,个人喜欢将项目的默认编码改为UTF-8。使用的开发工具以Eclipse为主。然而,奇怪的问题出现了。当我在IDE中对项目进行调试的时候没有任何问题,但是打成了jar包后再通过

java -jar project.jar

运行的时候,每次提交数据,接口都会返回数据说我的签名不正确。换句话说就是我的最后一步,做MD5运算的时候出了问题。

为什么打了jar包就不行呢?几经波折,又是查看参数的hashCode,又是检查所有提交内容的十六进制数据,发现是文本编码出了问题。在Eclipse中是正确的,但是打出jar包后,启动命令行一直没设置字符串默认编码,因此java虚拟机就按照所在系统的默认编码运行了。我使用的是Windows环境,那么自然是GBK编码。

后来通过查阅资料,解决的办法就是加一个参数指定编码:
java -Dfile.encoding=utf-8 -jar project.jar
这样就可以了。工具正常运行了。