this->schedule(schedule_selector(GamePlaying::updateGame),0.01f);
auto staticUpdatePtr = static_cast
this->schedule(staticUpdatePtr,0.01f);
Examples:
ccBezierConfig tr0;
tr0.endPosition=ccp(280, 240);
tr0.controlPoint_1=ccp(40, 400);
tr0.controlPoint_2=ccp(280, 80);
CCActionInterval* bezierForward = CCBezierBy::create(1.f, tr0);
实现一个发射子弹的方法 子弹的朝向的角度会根据发射的终点和起点变化。
auto sp = Sprite::create("bullet.png");
Vec2 endPos = Vec2(200, 500);
Vec2 startPos = Vec2(100, 50);
auto move = MoveTo::create(5, endVec2);
sp->runAction(move);
//计算角度
Vec2 dis = endPos - startPos;
sp->setRotation(Vec2(dis.y, dis.x).getAngle() / 3.14f * 180);//一定注意x和y参数是倒过来的
//这样发射出去的子弹就会朝向终点了
第一种是采用函数回调,主要是用于MenuItem
第二种方法TouchEvent响应
第三种 触摸监听绑定
Examples:
$ mkdir win32-build
$ cd win32-build
$ cmake .. -G"Visual Studio 16 2019" -Tv142 -A win32
下载安装python 2.7
下载安装Cocos2d-x 4.0
E:\dev\cocos2d-x-4.0>python ./setup.py
Setting up cocos2d-x...
->Check environment variable COCOS_CONSOLE_ROOT
->Search for environment variable COCOS_CONSOLE_ROOT...
->COCOS_CONSOLE_ROOT not found
->Add directory "E:\dev\cocos2d-x-4.0\tools\cocos2d-console\bin" into PATH succeed!
-> Add COCOS_CONSOLE_ROOT environment variable...
->Added COCOS_CONSOLE_ROOT=E:\dev\cocos2d-x-4.0\tools\cocos2d-console\bin
->Check environment variable COCOS_X_ROOT
->Search for environment variable COCOS_X_ROOT...
->COCOS_X_ROOT not found
->Add directory "E:\dev" into PATH succeed!
-> Add COCOS_X_ROOT environment variable...
->Added COCOS_X_ROOT=E:\dev
->Check environment variable COCOS_TEMPLATES_ROOT
->Search for environment variable COCOS_TEMPLATES_ROOT...
->COCOS_TEMPLATES_ROOT not found
->Add directory "E:\dev\cocos2d-x-4.0\templates" into PATH succeed!
-> Add COCOS_TEMPLATES_ROOT environment variable...
->Added COCOS_TEMPLATES_ROOT=E:\dev\cocos2d-x-4.0\templates
->Configuration for Android platform only, you can also skip and manually edit your environment variables
->Check environment variable NDK_ROOT
->Search for environment variable NDK_ROOT...
->NDK_ROOT is found : D:\android-ndk-r10d
->Check environment variable ANDROID_SDK_ROOT
->Search for environment variable ANDROID_SDK_ROOT...
->ANDROID_SDK_ROOT is found : E:\android-sdk-windows
创建项目
cocos new CandyMatch3 -p com.vworldtech.match3candy -l cpp -d E:\dev\CandyMatch3
搭建开发环境 - Android 平台
https://docs.cocos.com/cocos2d-x/manual/zh/installation/Android-Studio.html
Android Studio更新gradle等软件
导入项目
app/jni/application.mk 修改为 APP_STL := c++_static
gradle.properties
PROP_COMPILE_SDK_VERSION=28
PROP_MIN_SDK_VERSION=14
PROP_TARGET_SDK_VERSION=24
PROP_APP_PLATFORM=14
PROP_APP_ABI=armeabi-v7a
app/build.gradle
注释掉 //arguments 'NDK_TOOLCHAIN_VERSION=4.9'
修改buildToolsVersion "28.0.3"
proj.android-studio/build.gradle修改
allprojects {
repositories {
jcenter()
+ google()
}
}
SDKBOX
安装时需要连接VPN,否则可能报SSL CERTIFICATE_VERIFY_FAILED相关的错误
安装sdk时提示路径错误,先在proj.android-studio目录下创建临时文件/夹,安装完成后再移到proj.android-studio/app目录下
[app/*.iml文件将app/sdkbox等3个目录改为app/jni/sdkbox]
修改AppActivity.java
+ import android.content.Intent;
+ import com.sdkbox.plugin.SDKBox;
protected void onCreate(Bundle savedInstanceState) {
...
+ SDKBox.init(this);
}
添加
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if(!SDKBox.onActivityResult(requestCode, resultCode, data)) {
super.onActivityResult(requestCode, resultCode, data);
}
}
@Override
protected void onStart() {
super.onStart();
SDKBox.onStart();
}
@Override
protected void onStop() {
super.onStop();
SDKBox.onStop();
}
@Override
protected void onResume() {
super.onResume();
SDKBox.onResume();
}
@Override
protected void onPause() {
super.onPause();
SDKBox.onPause();
}
@Override
public void onBackPressed() {
if(!SDKBox.onBackPressed()) {
super.onBackPressed();
}
}
Android.mk添加
LOCAL_WHOLE_STATIC_LIBRARIES += PluginAdMob
sdkbox \
PluginSdkboxAds
文件末尾添加(必须末尾、全路径,原因待查)
include absolute_root_path\proj.android-studio\app\jni\CocosAndroid.mk
CocosAndroid.mk中包含的重要部分
LOCAL_PATH := $(call my-dir)
$(call import-add-path, $(LOCAL_PATH))
$(call import-module, sdkbox)
$(call import-module, PluginSdkboxAds)
$(call import-module, PluginAdMob)
TroubleShooting
Admob: proxy is null可能是sdkbox_config.json格式错误,多检查日志里的error,如果json格式错误会提示
##视频信息
ffmpeg -i E:\B\1.mp4
-vcodec 后面是编码格式
ffmpeg -i out.ogv -vcodec h264 out.mp4
ffmpeg -i out.ogv -vcodec mpeg4 out.mp4
ffmpeg -i out.ogv -vcodec libxvid out.mp4
ffmpeg -i out.mp4 -vcodec wmv1 out.wmv
##用 -ss 和 -t 选项, 从第 30 秒开始,向后截取 10 秒的视频,并保存:
ffmpeg -i input.wmv -ss 00:00:30.0 -c copy -t 00:00:10.0 output.wmv
##达成相同效果,也可以用 -ss 和 -to 选项, 从第 0 秒截取到第 10 秒:
ffmpeg -i output.mp4 -ss 00:00:00.0 -c copy -to 00:00:10.0 03.mp4
ffmpeg -i output.mp4 -ss 00:00:20.0 -c copy -to 00:00:30.0 05.mp4
剪切的同时,格式不变,音视频参数不变:
ffmpeg -y -i bjysxyt5.mp4 -ss 00:00:00.0 -t 00:01:00.0 -acodec copy -vcodec copy -async 1 bjysxyt1.mp4
剪切的同时,音视频参数不变,只转换格式:
ffmpeg -y -i bjysxyt5.mp4 -ss 00:00:00.0 -t 00:01:00.0 -acodec copy -vcodec copy -async 1 bjysxyt1.flv
剪切的同时,格式不变,只转换音视频参数:
ffmpeg -y -i bjysxyt5.mp4 -ss 00:00:00.0 -t 00:01:00.0 -ab 56k -ar 44100 -b:v 2200k -r 29.97 -s 640x360 bjysxyt1.mp4
剪切的同时,既转换格式又转换音视频参数:
ffmpeg -y -i bjysxyt5.mp4 -ss 00:00:00.0 -t 00:01:00.0 -ab 56k -ar 44100 -b:v 2200k -r 29.97 -s 640x360 bjysxyt1.flv
说明:-i表示输入文件;-acodec copy -vcodec copy 表示音频、视频不进行编解码,直接复制源视频;-ss表示起始时间,-t表示时长,格式均为“小时:分钟:秒”。
***改大小
ffmpeg -i input.mp4 -strict -2 -s 640x480 output.mp4 #mp4 要用 -strict -2
ffmpeg -i input.avi -s 640x480 output.avi
改变为源视频一半大小
ffmpeg -i input.mpg -vf scale=iw/2:ih/2 output.mp4
###改变为原视频的90%大小:
ffmpeg -i input.mpg -vf scale=iw0.9:ih0.9 output.mp4
###裁剪输入视频的左三分之一,中间三分之一,右三分之一:
ffmpeg -i input -vf crop=iw/3:ih :0:0 output
ffmpeg -i input -vf crop=iw/3:ih :iw/3:0 output
ffmpeg -i input -vf crop=iw/3:ih :iw/3*2:0 output
前面都要加$$$$ ffmpeg
//渐入 -i in.mp4 -vf fade=in:0:90 out.mp4
//黑白 -i in.mp4 -vf lutyuv="u=128:v=128" out.mp4
//锐化 -i in.mp4 -vf unsharp=luma_msize_x=7:luma_msize_y=7:luma_amount=2.5 out.mp4
//反锐化 -i in.mp4 -vf unsharp=7:7:-2:7:7:-2 out.mp4
//渐晕 -i in.mp4 -vf vignette=PI/4 out.mp4
//闪烁渐晕 -i in.mp4 -vf vignette='PI/4+random(1)*PI/50':eval=frame out.mp4
//视频颤抖 -i in.mp4 -vf crop="in_w/2:in_h/2:(in_w-out_w)/2+((in_w-out_w)/2)*sin(n/10):(in_h-out_h)/2+((in_h-out_h)/2)*sin(n/7)" out.mp4
//色彩变幻 -i in.mp4 -vf hue="H=2*PI*t: s=sin(2*PI*t)+1" out.mp4 //Rotate hue and make the saturation swing between 0 and 2 over a period of 1 second
//模糊处理 -i in.mp4 -vf boxblur=5:1:cr=0:ar=0 out.mp4
//镜像翻转 -i in.mp4 -vf crop=iw/2:ih:0:0,split[left][tmp];[tmp]hflip[right];[left]pad=iw*2[a];[a][right]overlay=w out.mp4
//水平翻转 -i in.mp4 -vf geq=p(W-X\,Y) out.mp4
//垂直翻转 -i in.mp4 -vf vflip out.mp4
//浮雕效果 -i in.mp4 -vf format=gray,geq=lum_expr='(p(X,Y)+(256-p(X-4,Y-4)))/2' out.mp4
//均匀噪声 -i in.mp4 -vf noise=alls=20:allf=t+u out.mp4
//绿色的显示效果 -i in.mp4 -vf curves=vintage:green='0.45/0.53' out.mp4
//水印叠加 -i in.mp4 -vf movie=test.jpg[wm];[in][wm]overlay=5:5[out] out.mp4
//[四个画面在一个视频里]多路输入拼接 -i test1.mp4 -i test2.mp4 -i test3.mp4 -i test4.mp4 -filter_complex "[0:v]pad=iw*2:ih*2[a];[a][1:v]overlay=w[b];[b][2:v]overlay=0:h[c];[c][3:v]overlay=w:h" out.mp4
$ find / -name apache2
====
$ ps aux #进程的一些信息如pid, cpu和内存使用
$ kill -signal PID
查看正在执行的nginx进程
ps -ef |grep nginx
杀死正在执行的进程
sudo kill -9 xxx:xxx表示的是进程代码
====
$ chown -R lanceou:lanceou * #改所有文件夹和文件拥有者 OR chown lanceou:lanceou FILENAME
$ chmod 777 file # r=4,w=2,x=1 若要rwx属性则4+2+1=7; 若要rw-属性则4+2=6; 若要r-x属性则4+1=5。
====
$ netstat -ap | grep apache2 #找出程序运行的端口
$ netstat -lt $ netstat -lu #显示 TCP 或 UDP 端口的统计信息 netstat -st 或 -su
$ netstat -a
##############################MySQL##############################
MySQL启动服务
$ service mysql start
$ sudo netstat -tap | grep mysql
##############################Apache2##############################
Ubuntu、Start Apache 2 Server /启动apache服务
$ /etc/init.d/apache2 start
$ /etc/init.d/apache2 stop systemctl status apache2
##############################ShadowSocket ########################################
1. ShadowSocket 启动服务
$ ssserver -c /etc/shadowsocks/config.json -d start
##############################ShadowSocket ########################################
1. ShadowSocket 启动服务
ssserver -c /etc/shadowsocks/config.json -d start
######################V2RAY##############################
$ sudo systemctl start v2ray
$ systemctl status v2ray