1.做好微信开放平台的审核工作

第一步:创建自己的微信开放平台账号并且提交自己的应用等待审核

审核通过之后就会如上图所示,审核已通过。一般应用审核通过之后只会有微信分享和收藏的功能:


某些接口是要收费的,具体要看自己的需求了,再提交应用的时候有很重要的两点,第一就是包名,安卓程序唯一标识就是包名,也是安装在手机上的唯一标识,这样系统才会识别出来这是两种不同的应用。还有一个就是应用签名:把apk文件装在手机上用微信开放平台的签名检测工具,输入自己的包名就可以得出应用签名了,然后把这个签名提交到微信开放平台上。(这里有一点需要特别注意,到后面出现无法登陆微信的情况很有可能是本地签名和微信开放平台的签名不一致所导致的,导出自己的apk时,要注意需要用keystore文件来对apk进行签名,这样带有keystore文件的apk以后就可以用这个keystore来签名了,尽量不要用debug.keystore。在以后微信开放平台上面的应用签名也可以修改)

在eclipse里面打开这个窗口进行keystore的导入(首先要自己创建一个keystore文件):



选择keystore文件之后点击apply,然后ok就可以了。


2.编写本地代码

由于我的项目是Cocos项目,要想调用Java层的微信SDK接口必须在本地编写逻辑代码,然后借助Jni来调用Java层的代码:
    self.Button_login:addTouchEventListener(function ( sender,eventType )
        if eventType == ccui.TouchEventType.ended then 
            print('==================登录 LoginScene:btnEvent()')
            self:lodingAnimation()
            game.anysdk:login_native()
        end
    end)

然后走到anysdk:login_native里面(也可以直接走到Jni里面)

function AnySdk:login_native()
    local function LoginServer()
        local function callBack()
            MissionManager.getMission('login_mission','main_mission'):sendData(MDM_GR_logoN,SUB_GP_logoN_ACCOUNTS)
        end 
        MissionManager.connect(LOGIN_SERVER_NAME,LOGIN_SERVER_IP,LOGIN_SERVER_PORT,callBack)
    end

    if device.platform == "android" or device.platform == "ios" then
        local access_token  = cc.UserDefault:getInstance():getStringForKey("access_token","")
        local openid        = cc.UserDefault:getInstance():getStringForKey("openid","")
        if access_token ~= "" and openid ~= "" then 
            self:getWeixinInfo(access_token,openid,LoginServer)
        else
            JniFun:create():longinWX(APP_ID,AppSecret)
        end
    else
        --self:getWeixinInfo("","",LoginServer)
        local function callBack()
            MissionManager.getMission('login_mission',SUB_GP_REGISTER_ACCOUNTS)
        end 
        MissionManager.connect(LOGIN_SERVER_NAME,callBack)
    end
end

然后进入到JniFun:loginWX里面:

#include "JniFun.h"
#include "cocos2d.h"

#include "ccluaEngine.h"

#if CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID
#include <Jni.h>
#include "platform/android/jni/JniHelper.h"
#include "jubaosdk/ShellApiJni.h"
#endif
#if CC_TARGET_PLATFORM == CC_PLATFORM_IOS
#include "IosHelper.h"
#endif

#define JAVA_CLASSNAME  "com/wx/Native"
using namespace cocos2d;
void JniFun::longinWX(const char* APP_ID,const char* AppSecret)
	{
#if CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID
		JniMethodInfo minfo;
		bool isHave = JniHelper::getStaticmethodInfo(minfo,JAVA_CLASSNAME,"LoginWX","(Ljava/lang/String;Ljava/lang/String;)V");
		if (isHave)
		{
			jstring jAPP_ID = minfo.env->NewStringUTF(APP_ID);										 
			jstring jAppSecret = minfo.env->NewStringUTF(AppSecret);
			minfo.env->CallStaticVoidMethod(minfo.classID,minfo.methodID,jAPP_ID,jAppSecret);

			minfo.env->DeleteLocalRef(jAPP_ID);
			minfo.env->DeleteLocalRef(jAppSecret);
			minfo.env->DeleteLocalRef(minfo.classID); 
			cocos2d::log("JniFun call LoginWX over!");
		}
		else
		{
			//NoticeMsg::Instance().Showlogon(false);
			cocos2d::log("JniFun call LoginWX error!");
		}
#endif
#if CC_TARGET_PLATFORM == CC_PLATFORM_IOS
        cocos2d::log("IosHelper::sendAuthRequest!");
		IosHelper::sendAuthRequest();
#endif
	}

在JniFun里面就用到了cocos封装好的JniHelper类,通过上面的代码才会真正调用到Java里面的微信API方法

其中这里需要注意,微信的方法编写是有约束的,打个比方,如果你的项目包名是com.zhijiegame.www,那么你就要在src下面先新建一个com.zhijiegame.www.wxapi的包,这个命名规则是微信要求的,然后在这个包下面创建一个WXEntryAvtivity的类:
package com.ydqp.yjmj.wxapi;

import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.res.AssetManager;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.Toast;

import com.wx.Native;
import com.wx.Util;


import com.tencent.mm.sdk.constants.ConstantsAPI;
import com.tencent.mm.sdk.modelbase.BaseReq;
import com.tencent.mm.sdk.modelbase.BaseResp;
import com.tencent.mm.sdk.modelmsg.SendAuth;
import com.tencent.mm.sdk.modelmsg.SendMessagetoWX;
import com.tencent.mm.sdk.modelmsg.ShowMessageFromWX;
import com.tencent.mm.sdk.modelmsg.WXAppExtendobject;
import com.tencent.mm.sdk.modelmsg.WXImageObject;
import com.tencent.mm.sdk.modelmsg.WXMediaMessage;
import com.tencent.mm.sdk.modelmsg.WXTextObject;
import com.tencent.mm.sdk.modelmsg.WXWebpageObject;
import com.tencent.mm.sdk.openapi.IWXAPI;
import com.tencent.mm.sdk.openapi.IWXAPIEventHandler;
import com.tencent.mm.sdk.openapi.WXAPIFactory;

public class WXEntryActivity extends Activity implements IWXAPIEventHandler{
	
	public static String Tag = "YZH";
	private static final int TIMELINE_SUPPORTED_VERSION = 0x21020001;
	private static WXEntryActivity sContext = null;
	public static boolean blogonWX = false;
	public static boolean isShareWX = false;
	public static boolean isShareURL = false;
	private static final int THUMB_SIZE = 150;

    public static final String APP_ID = "*****************************";
    public static final String AppSecret = "******************************";
	
    private IWXAPI 			  api;
    
	private static final int Scenesession = 0;
	private static final int SceneTimeline = 1; 
	
	public static String ReqWxLogin = "ReqWxLogin";
	public static String ReqWxShareImg = "ReqWxShareImg";
	public static String ReqWxShareTxt = "ReqWxShareTxt";
	public static String ReqWxShareUrl = "ReqWxShareUrl";
	public static String ReqWXPay = "ReqWXPay";
	
	
	
	 public void onCreate(Bundle savedInstanceState)
	 {
	        super.onCreate(savedInstanceState);
	        sContext = this;
    	    Log.d(Tag,"onCreate");
    	    Log.d(Tag,"onCreate1");
			Intent intent = getIntent();
			Log.d(Tag,"onCreate2");
	    	api = WXAPIFactory.createWXAPI(this,APP_ID,false);
	    	Log.d(Tag,"onCreate3");
		    api.registerapp(APP_ID);
		    Log.d(Tag,"onCreate4");
	        api.handleIntent(intent,this);
	        Log.d(Tag,"onCreate5");
	        
			if (intent.hasExtra(ReqWxLogin)) 
			{
	        	reqLogin();
			}
			else if(intent.hasExtra(ReqWxShareImg))
			{
				isShareWX=true;
				Log.d(Tag,"ReqWxShareImg");
				String ImgPath = intent.getStringExtra("ImgPath");
				int nType = intent.getIntExtra("ShareType",0);
				 reqShareImg(ImgPath,nType);
			}
			else if(intent.hasExtra(ReqWxShareTxt))
			{
				isShareWX=true;
				Log.d(Tag,"ReqWxShareTxt");
				String ShareText = intent.getStringExtra("ShareText");
				int nType = intent.getIntExtra("ShareType",0);
				reqShareTxt(ShareText,nType);
			}
			else if(intent.hasExtra(ReqWxShareUrl))
			{
				isShareWX=true;
				Log.d(Tag,"ReqWxShareUrl");
				String ShareUrl = intent.getStringExtra("ShareUrl");
				String ShareTitle = intent.getStringExtra("ShareTitle");
				String ShareDesc = intent.getStringExtra("ShareDesc");
				int nType = intent.getIntExtra("ShareType",0);
				reqShareUrl(ShareUrl,ShareTitle,ShareDesc,nType);
			}
			Log.d(Tag,"onCreate fnish");
			finish();
	 }
	  
	  @Override
	  protected void onNewIntent(Intent intent) 
	  {
			super.onNewIntent(intent);
			Log.d(Tag,"1");
			setIntent(intent);
			Log.d(Tag,"2");
	        api.handleIntent(intent,"3");
	  }
 
    public void reqLogin()
    {
    	SendAuth.Req req = new SendAuth.Req();
    	req.scope = "snsapi_userinfo";
    	req.state = "123";
    	api.sendReq(req);
	    Log.d(Tag,"reqLogin");
	    if(!api.openWXApp())
	    {
	    	Toast.makeText(this,"请先安装微信客户端",Toast.LENGTH_LONG).show(); 
	    }
    } 
    public void reqShareImg(String ImgPath,int nType)
    {
		File file = new File(ImgPath);
		if (!file.exists()) 
		{
		    Log.d(Tag,"reqShare file not exists:"+ImgPath);
		    return;
		}

		Bitmap bmp = BitmapFactory.decodeFile(ImgPath);
		WXImageObject imgObj = new WXImageObject(bmp);
		
		WXMediaMessage msg = new WXMediaMessage();
		msg.mediaObject = imgObj;
		
		Bitmap thumbBmp = Bitmap.createScaledBitmap(bmp,128,72,true);
		bmp.recycle();
		msg.thumbData = Util.bmpToByteArray(thumbBmp,true);
		
		SendMessagetoWX.Req req = new SendMessagetoWX.Req();
		req.transaction = buildTransaction("img");
		req.message = msg;
		if(nType==SceneTimeline )
		{
			req.scene = SendMessagetoWX.Req.WXSceneTimeline;
		}
		else if(nType==Scenesession )
		{
			req.scene = SendMessagetoWX.Req.WXScenesession;
		}
		api.sendReq(req);
	    Log.d(Tag,"reqShare Ok:"+ImgPath);
    }
    public void reqShareTxt(String text,int nType)
    {
	
		WXTextObject textObj = new WXTextObject();
		textObj.text = text;

		
		WXMediaMessage msg = new WXMediaMessage();
		msg.mediaObject = textObj;
		
		// msg.title = "Will be ignored";
		msg.description = text;

		
		SendMessagetoWX.Req req = new SendMessagetoWX.Req();
		req.transaction = buildTransaction("text"); 
		req.message = msg;
		if(nType==SceneTimeline )
		{
			req.scene = SendMessagetoWX.Req.WXSceneTimeline;
		}
		else if(nType==Scenesession )
		{
			req.scene = SendMessagetoWX.Req.WXScenesession;
		}
		
		api.sendReq(req);
		

	    Log.d(Tag,"reqShareTxt Ok:"+text);
    }
    
    public native void Share();
    
    public void reqShareUrl(String url,String title,String desc,int nType)
    {
    
		WXWebpageObject textObj = new WXWebpageObject();
		textObj.webpageUrl = url;

		
		WXMediaMessage msg = new WXMediaMessage();
		msg.mediaObject = textObj;
		
		msg.title = title;
		msg.description = desc;
		//if(nType==SceneTimeline )
		{
			AssetManager asm=getAssets();
			String s  = "weixin_share_icon.png";
			
			InputStream is = null;
			
			try {
				is = asm.open(s);
			} catch (IOException e) {
				// Todo Auto-generated catch block
				e.printstacktrace();
			}//asm.open("");

			
			Bitmap bmp=BitmapFactory.decodeStream(is);
			
			URL res = this.getClass().getResource("icon.png");
			Log.d(Tag,"r:"+res);
			
			if (null != bmp) {
	         
	            Bitmap thumbBmp = Bitmap.createScaledBitmap(bmp,80,true);
	            bmp.recycle();
	            ByteArrayOutputStream baos = new ByteArrayOutputStream();
	            thumbBmp.compress(Bitmap.CompressFormat.PNG,100,baos);
	            msg.thumbData = baos.toByteArray();
	        }
		}
		
		SendMessagetoWX.Req req = new SendMessagetoWX.Req();
		req.transaction = buildTransaction("webpage"); 
		req.message = msg;
		if(nType==SceneTimeline )
		{
			isShareURL = false;
			req.scene = SendMessagetoWX.Req.WXSceneTimeline;
		}
		else if(nType==Scenesession )
		{
			isShareURL = false;
			req.scene = SendMessagetoWX.Req.WXScenesession;
		}
		
		api.sendReq(req);
		

	    Log.d(Tag,"reqShareUrl Ok:"+url);
    }

    public void reqShareTxtCB(String text,int nType)
    {
    	 // send appdata with no attachment
    	WXAppExtendobject appdata = new WXAppExtendobject("lallalallallal","filePath");
    	
    	boolean bValue =  appdata.checkArgs();
    	if (!bValue)
    	{
    	    Log.d(Tag,"reqShareTxtCB Error:"+text);
    	}
    	
    	WXMediaMessage msg = new WXMediaMessage();
    	msg.title ="11";
    	msg.description = "22";
    	msg.mediaObject = appdata;
    	
    	SendMessagetoWX.Req req = new SendMessagetoWX.Req();
		req.transaction = buildTransaction("appdata");
		req.message = msg;
		
		if(nType==SceneTimeline )
		{
			req.scene = SendMessagetoWX.Req.WXSceneTimeline;
		}
		else if(nType==Scenesession )
		{
			req.scene = SendMessagetoWX.Req.WXScenesession;
		}
		
		api.sendReq(req);

	    Log.d(Tag,"reqShareTxtCB Ok:"+text);
    }
    
	
	@Override
	public void onReq(BaseReq req) 
	{
		switch (req.getType()) 
		{
		case ConstantsAPI.COMMAND_GETMESSAGE_FROM_WX: 
			Log.d(Tag,"onReq:COMMAND_GETMESSAGE_FROM_WX");
			break;
		case ConstantsAPI.COMMAND_SHOWMESSAGE_FROM_WX:
			Log.d(Tag,"onReq:COMMAND_SHOWMESSAGE_FROM_WX");
			break;
		default:
			break;
		}

	    Log.d(Tag,"onReq:"+req.getType());
	}

	
	@Override
	public void onResp(BaseResp resp) {
		String result = null;

	    Log.d(Tag,"errCode:"+resp.errCode);
	    
		switch (resp.errCode) {
		case BaseResp.ErrCode.ERR_OK:
			Log.d(Tag,"OK");
			result = "操作成功";
			if(!isShareWX)
			{
				isShareWX=!isShareWX;
				result ="操作成功";
			    String code = ((SendAuth.Resp) resp).code;
			    String Url =code;
			    Log.d(Tag,"OK1");
			    Log.d(Tag,Url);
			    Native.WxLoginGetAccesstoken(Url);
			    Log.d(Tag,"OK2");
			}
			Log.d(Tag,"Start Share");
			if(isShareURL)
			{
				Log.d(Tag,"Shareing");
				Share();
				result ="分享成功";
			}
			Log.d(Tag,"Over Share");
			break;
		case BaseResp.ErrCode.ERR_USER_CANCEL:
			Log.d(Tag,"quxiao");
			result ="用户取消";
		    Native.WxLoginGetAccesstoken("ERR_USER_CANCEL");
			break;
		case BaseResp.ErrCode.ERR_AUTH_DENIED:
			Log.d(Tag,"jujue");
			result ="用户拒绝";
		    Native.WxLoginGetAccesstoken("ERR_AUTH_DENIED");
			break;
		default:
			Log.d(Tag,"buzhidao");
			result ="未知错误";
		    Native.WxLoginGetAccesstoken("REE_UnkNow");
			break;
		}
		Toast.makeText(this,result,Toast.LENGTH_LONG).show(); 
	}
	
	private String buildTransaction(final String type) {
		return (type == null) ? String.valueOf(System.currentTimeMillis()) : type + System.currentTimeMillis();
	}
	
}
把你申请得到的APP_ID和AppSecret填上去,就可以了,这里只是做了简单的登录功能,其他部分都差不多,调用不同的函数就可以了。

Cocos项目中接入微信SDK的更多相关文章

  1. 详解如何通过H5(浏览器/WebView/其他)唤起本地app

    这篇文章主要介绍了详解如何通过H5(浏览器/WebView/其他)唤起本地app的相关资料,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  2. ios – Trello iPhone应用程序是如何开发的?

    我想知道Trelloiphone应用程序正在使用哪些库或框架.它是一个JS框架的webapp?我很好奇,因为我非常喜欢用户界面,并且在没有运气的情况下搜索了互联网.解决方法我在Trello团队中编写了iPhone应用程序.它是除了附件查看器之外的所有本机代码,它只是一个WebView.我们使用RestKit与我们的API进行通信,并帮助将数据本地缓存到CoreData.否则,它只是一堆自定义UIViews和UIViewControllers.

  3. 适用于iOS和路线的Google Maps SDK

    解决方法库中有一些东西不在文档中,所以如果你正在寻找一个功能,那么值得下载SDK并查看标题.然而,在当前版本1.0.2中,我没有看到任何路由–搜索路线或绘制路线.目前,您唯一的选择可能是使用其他GoogleApi来查找路径,然后正如Lee所说,使用折线绘制它们.

  4. openURL崩溃:iOS 9中可能存在Facebook SDK错误

    也许Facebook的SDK在这个特例上有错误?解决方法我找到了答案看起来它只是一个发布模式问题.通过启用Xcode运行发布版本,我能够调试我的问题.它是由参数sourceApplication引起的,在发布模式下显然需要解包.不知道为什么,但至少我得到它的工作.

  5. 使用最新的Flurry SDK和ios4重新启动应用程序

    我真的希望这对我来说只是一个愚蠢的错误.我很高兴使用Flurry但这样的事情会导致我的应用被拒绝.解决方法我写了关于这个的Flurry,他们很快回到我身边,他们会调查这个.大约一个星期后,他们回信并表示他们已经在v2.6中修复了它,现在可用了.我似乎无法重现这个问题.不是说我很棒或者什么,但我还是单枪匹马地解决了这个问题.

  6. ios-您的应用是否包含,显示或访问第三方内容? AdMob广告

    虽然在itunes上提交了一个app,它集成了admob,但复选框“你的应用是否包含,显示或访问第三方内容?”的价值应该是什么?解决方法答案是否定的,不要检查它,而你必须检查你的应用程序是否正在使用IDFA,并确保选中“在应用程序内投放广告”.

  7. ios – 在AFNetworking中设置用户代理

    我们的iOS应用程序最近被Apple拒绝,因为它无法与我们的服务器api建立有效连接.我们使用特殊格式的用户代理来注册设备令牌等.如果用户代理不适合我们的sheme,则api会阻止请求.这一切都很好地在模拟器和真实设备上测试应用程序.用户代理设置正确,api调用工作正常.当Apple测试应用程序时,他们拒绝了它,因为应用程序无法连接到api.当我们检查服务器日志文件时,我们注意到,Apple测试人

  8. ios – Interface Builder无法确定“Main.storyboard”的类型.这可能是由于缺少SDK

    解决方法这没有你想象的那么复杂.该错误是因为您在Main.storyboard的源代码上输错了一些内容,例如我不小心在Main.storyboard的第一个打开标记之前放了一个“”.1)你必须做的是删除Main.storyboard2)转到垃圾箱,将Main.storyboard移动到桌面,用任何文本编辑器打开并修复代码;然后“全选”和“复制”.3)在Xcode上,创建一个全新的Main.storyboard,然后按右键单击文件并选择OpenAs–>源代码,然后粘贴您在剪贴板上的固定代码.4)右键单击文件

  9. iOS / XCode:如何通过点击通知或跳板应用程序图标来了解该应用程序已启动?

    我想知道是否有办法知道某个应用程序是否已通过点击启动:>通知?>或跳板上的应用程序图标?

  10. iOS:安装Google移动广告SDK的错误说明?

    为什么我必须在此版本中安装Firebase/Core?

随机推荐

  1. 【cocos2d-x 3.x 学习笔记】对象内存管理

    Cocos2d-x的内存管理cocos2d-x中使用的是上面的引用计数来管理内存,但是又增加了一些自己的特色。cocos2d-x中通过Ref类来实现引用计数,所有需要实现内存自动回收的类都应该继承自Ref类。下面是Ref类的定义:在cocos2d-x中创建对象通常有两种方式:这两中方式的差异可以参见我另一篇博文“对象创建方式讨论”。在cocos2d-x中提倡使用第二种方式,为了避免误用第一种方式,一般将构造函数设为protected或private。参考资料:[1]cocos2d-x高级开发教程2.3节[

  2. 利用cocos2dx 3.2开发消灭星星六如何在cocos2dx中显示中文

    由于编码的不同,在cocos2dx中的Label控件中如果放入中文字,往往会出现乱码。为了方便使用,我把这个从文档中获取中文字的方法放在一个头文件里面Chinese.h这里的tex_vec是cocos2dx提供的一个保存文档内容的一个容器。这里给出ChineseWords,xml的格式再看看ChineseWord的实现Chinese.cpp就这样,以后在需要用到中文字的地方,就先include这个头文件然后调用ChineseWord函数,获取一串中文字符串。

  3. 利用cocos2dx 3.2开发消灭星星七关于星星的算法

    在前面,我们已经在GameLayer中利用随机数初始化了一个StarMatrix,如果还不知道怎么创建星星矩阵请回去看看而且我们也讲了整个游戏的触摸事件的派发了。

  4. cocos2dx3.x 新手打包APK注意事项!

    这个在编译的时候就可以发现了比较好弄这只是我遇到的,其他的以后遇到再补充吧。。。以前被这两个问题坑了好久

  5. 利用cocos2dx 3.2开发消灭星星八游戏的结束判断与数据控制

    如果你看完之前的,那么你基本已经拥有一个消灭星星游戏的雏形。开始把剩下的两两互不相连的星星消去。那么如何判断是GameOver还是进入下一关呢。。其实游戏数据贯穿整个游戏,包括星星消除的时候要加到获得分数上,消去剩下两两不相连的星星的时候的加分政策等,因此如果前面没有做这一块的,最好回去搞一搞。

  6. 利用cocos2dx 3.2开发消灭星星九为游戏添加一些特效

    needClear是一个flag,当游戏判断不能再继续后,这个flag变为true,开始消除剩下的星星clearSumTime是一个累加器ONE_CLEAR_TIME就是每颗星星消除的时间2.连击加分信息一般消除一次星星都会有连击信息和加多少分的信息。其实这些combo标签就是一张图片,也是通过控制其属性或者runAction来实现。源码ComboEffect.hComboEffect.cpp4.消除星星粒子效果消除星星时,为了实现星星爆裂散落的效果,使用了cocos2d提供的粒子特效引擎对于粒子特效不了

  7. 02 Cocos2D-x引擎win7环境搭建及创建项目

    官网有搭建的文章,直接转载记录。环境搭建:本文介绍如何搭建Cocos2d-x3.2版本的开发环境。项目创建:一、通过命令创建项目前面搭建好环境后,怎样创建自己的Cocos2d-x项目呢?先来看看Cocos2d-x3.2的目录吧这就是Cocos2d-x3.2的目录。输入cocosnew项目名–p包名–lcpp–d路径回车就创建成功了例如:成功后,找到这个项目打开proj.win32目录下的Hello.slnF5成功了。

  8. 利用cocos2dx 3.2开发消灭星星十为游戏添加音效项目源码分享

    一个游戏,声音也是非常的重要,其实cocos2dx里面的简单音效引擎的使用是非常简单的。我这里只不过是用一个类对所有的音效进行管理罢了。Audio.hAudio.cpp好了,本系列教程到此结束,第一次写教程如有不对请见谅或指教,谢谢大家。最后附上整个项目的源代码点击打开链接

  9. 03 Helloworld

    程序都有一个入口点,在C++就是main函数了,打开main.cpp,代码如下:123456789101112131415161718#include"main.h"#include"AppDelegate.h"#include"cocos2d.h"USING_NS_CC;intAPIENTRY_tWinMain{UNREFERENCED_ParaMETER;UNREFERENCED_ParaMETER;//createtheapplicationinstanceAppDelegateapp;return

  10. MenuItemImage*图标菜单创建注意事项

    学习cocos2dx,看的是cocos2d-x3.x手游开发实例详解,这本书错误一大把,本着探索求知勇于发现错误改正错误的精神,我跟着书上的例子一起调试,当学习到场景切换这个小节的时候,出了个错误,卡了我好几个小时。

返回
顶部