亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? gameswf_action.cpp

?? 一個開源的嵌入式flash播放器 具體看文檔和例子就可
?? CPP
?? 第 1 頁 / 共 5 頁
字號:
		const char* p = method_arg_fmt;		for (;; p++)		{			char	c = *p;			if (c == 0)			{				// End of args.				break;			}			else if (c == '%')			{				p++;				c = *p;				// Here's an arg.				if (c == 'd')				{					// Integer.					env->push(va_arg(args, int));				}				else if (c == 'f')				{					// Double					env->push(va_arg(args, double));				}				else if (c == 's')				{					// String					env->push(va_arg(args, const char *));				}				else if (c == 'l')				{					p++;					c = *p;					if (c == 's')					{						// Wide string.						env->push(va_arg(args, const wchar_t *));					}					else					{						log_error("call_method_parsed('%s','%s') -- invalid fmt '%%l%c'\n",							  method_name,							  method_arg_fmt,							  c);					}				}				else				{					// Invalid fmt, warn.					log_error("call_method_parsed('%s','%s') -- invalid fmt '%%%c'\n",						  method_name,						  method_arg_fmt,						  c);				}			}			else			{				// Ignore whitespace and commas.				if (c == ' ' || c == '\t' || c == ',')				{					// OK				}				else				{					// Invalid arg; warn.					log_error("call_method_parsed('%s','%s') -- invalid char '%c'\n",						  method_name,						  method_arg_fmt,						  c);				}			}		}		array<with_stack_entry>	dummy_with_stack;		as_value	method = env->get_variable(method_name, dummy_with_stack);		// check method		// Reverse the order of pushed args		int	nargs = env->get_top_index() - starting_index;		for (int i = 0; i < (nargs >> 1); i++)		{			int	i0 = starting_index + 1 + i;			int	i1 = starting_index + nargs - i;			assert(i0 < i1);			swap(&(env->bottom(i0)), &(env->bottom(i1)));		}		// Do the call.		as_value	result = call_method(method, env, this_ptr, nargs, env->get_top_index());		env->drop(nargs);		// Return pointer to static string for return value.		static tu_string	s_retval;		s_retval = result.to_tu_string();		return s_retval.c_str();	}	//	// sound object	//	struct sound_as_object : public as_object	{		tu_string sound;		int sound_id;	};	void	movie_load()	{		IF_VERBOSE_ACTION(log_msg("-- start movie \n"));	}	void	sound_start(const fn_call& fn)	{		IF_VERBOSE_ACTION(log_msg("-- start sound \n"));		sound_handler* s = get_sound_handler();		if (s != NULL)		{			sound_as_object*	so = (sound_as_object*) (as_object*) fn.this_ptr;			assert(so);			s->play_sound(so->sound_id, 0);		}	}	void	sound_stop(const fn_call& fn)	{		IF_VERBOSE_ACTION(log_msg("-- stop sound \n"));		sound_handler* s = get_sound_handler();		if (s != NULL)		{			sound_as_object*	so = (sound_as_object*) (as_object*) fn.this_ptr;			assert(so);			s->stop_sound(so->sound_id);		}	}	void	sound_attach(const fn_call& fn)	{		IF_VERBOSE_ACTION(log_msg("-- attach sound \n"));		if (fn.nargs < 1)		{			log_error("attach sound needs one argument\n");			return;		}		sound_as_object*	so = (sound_as_object*) (as_object*) fn.this_ptr;		assert(so);		so->sound = fn.arg(0).to_tu_string();		// check the import.		movie_definition_sub*	def = (movie_definition_sub*)			fn.env->get_target()->get_root_movie()->get_movie_definition();		assert(def);		smart_ptr<resource> res = def->get_exported_resource(so->sound);		if (res == NULL)		{			log_error("import error: resource '%s' is not exported\n", so->sound.c_str());			return;		}		int si = 0;		sound_sample_impl* ss = (sound_sample_impl*) res->cast_to_sound_sample();		if (ss != NULL)		{			si = ss->m_sound_handler_id;		}		else		{			log_error("sound sample is NULL\n");			return;		}		// sanity check		assert(si >= 0 && si < 1000);		so->sound_id = si;	}	//	// Built-in objects	//	//	// math object	//#if 0	// One-argument simple functions.	#define MATH_WRAP_FUNC1(funcname)							\	void	math_##funcname(as_value* result, as_object_interface* this_ptr,		\				as_environment* env, int nargs, int first_arg_bottom_index)	\	{											\		double	arg = env->bottom(first_arg_bottom_index).to_number();			\		result->set_double(funcname(arg));						\	}#else	// One-argument simple functions.	#define MATH_WRAP_FUNC1(funcname)							\	void	math_##funcname(const fn_call& fn)						\	{											\		double	arg = fn.arg(0).to_number();						\		fn.result->set_double(funcname(arg));						\	}#endif	MATH_WRAP_FUNC1(fabs);	MATH_WRAP_FUNC1(acos);	MATH_WRAP_FUNC1(asin);	MATH_WRAP_FUNC1(atan);	MATH_WRAP_FUNC1(ceil);	MATH_WRAP_FUNC1(cos);	MATH_WRAP_FUNC1(exp);	MATH_WRAP_FUNC1(floor);	MATH_WRAP_FUNC1(log);	MATH_WRAP_FUNC1(sin);	MATH_WRAP_FUNC1(sqrt);	MATH_WRAP_FUNC1(tan);#if 0	// Two-argument functions.	#define MATH_WRAP_FUNC2_EXP(funcname, expr)										\	void	math_##funcname(as_value* result, as_object_interface* this_ptr, as_environment* env, int nargs, int first_arg_bottom_index)	\	{															\		double	arg0 = env->bottom(first_arg_bottom_index).to_number();							\		double	arg1 = env->bottom(first_arg_bottom_index - 1).to_number();						\		result->set_double(expr);											\	}#else	// Two-argument functions.	#define MATH_WRAP_FUNC2_EXP(funcname, expr)										\	void	math_##funcname(const fn_call& fn)										\	{															\		double	arg0 = fn.arg(0).to_number();										\		double	arg1 = fn.arg(1).to_number();										\		fn.result->set_double(expr);											\	}#endif	MATH_WRAP_FUNC2_EXP(atan2, (atan2(arg0, arg1)));	MATH_WRAP_FUNC2_EXP(max, (arg0 > arg1 ? arg0 : arg1));	MATH_WRAP_FUNC2_EXP(min, (arg0 < arg1 ? arg0 : arg1));	MATH_WRAP_FUNC2_EXP(pow, (pow(arg0, arg1)));	// A couple of oddballs.	void	math_random(const fn_call& fn)	{		// Random number between 0 and 1.		fn.result->set_double(tu_random::next_random() / double(Uint32(0x0FFFFFFFF)));	}	void	math_round(const fn_call& fn)	{		// round argument to nearest int.		double	arg0 = fn.arg(0).to_number();		fn.result->set_double(floor(arg0 + 0.5));	}		void math_init()	{		// Create built-in math object.		as_object*	math_obj = new as_object;		// constant		math_obj->set_member("e", 2.7182818284590452354);		math_obj->set_member("ln2", 0.69314718055994530942);		math_obj->set_member("log2e", 1.4426950408889634074);		math_obj->set_member("ln10", 2.30258509299404568402);		math_obj->set_member("log10e", 0.43429448190325182765);		math_obj->set_member("pi", 3.14159265358979323846);		math_obj->set_member("sqrt1_2", 0.7071067811865475244);		math_obj->set_member("sqrt2", 1.4142135623730950488);		// math methods		math_obj->set_member("abs", &math_fabs);		math_obj->set_member("acos", &math_acos);		math_obj->set_member("asin", &math_asin);		math_obj->set_member("atan", &math_atan);		math_obj->set_member("ceil", &math_ceil);		math_obj->set_member("cos", &math_cos);		math_obj->set_member("exp", &math_exp);		math_obj->set_member("floor", &math_floor);		math_obj->set_member("log", &math_log);		math_obj->set_member("random", &math_random);		math_obj->set_member("round", &math_round);		math_obj->set_member("sin", &math_sin);		math_obj->set_member("sqrt", &math_sqrt);		math_obj->set_member("tan", &math_tan);		math_obj->set_member("atan2", &math_atan2);		math_obj->set_member("max", &math_max);		math_obj->set_member("min", &math_min);		math_obj->set_member("pow", &math_pow);		s_global->set_member("math", math_obj);	}			void event_test(const fn_call& fn)	{		log_msg("FIXME: %s\n", __FUNCTION__);	}		//	// key object	//	struct key_as_object : public as_object	{		Uint8	m_keymap[key::KEYCOUNT / 8 + 1];	// bit-array		array<weak_ptr<as_object_interface> >	m_listeners;		int	m_last_key_pressed;		key_as_object()			:			m_last_key_pressed(0)		{			memset(m_keymap, 0, sizeof(m_keymap));		}		bool	is_key_down(int code)		{			if (code < 0 || code >= key::KEYCOUNT) return false;			int	byte_index = code >> 3;			int	bit_index = code - (byte_index << 3);			int	mask = 1 << bit_index;			assert(byte_index >= 0 && byte_index < int(sizeof(m_keymap)/sizeof(m_keymap[0])));			if (m_keymap[byte_index] & mask)			{				return true;			}			else			{				return false;			}		}		void	set_key_down(int code)		{			if (code < 0 || code >= key::KEYCOUNT) return;			m_last_key_pressed = code;			int	byte_index = code >> 3;			int	bit_index = code - (byte_index << 3);			int	mask = 1 << bit_index;			assert(byte_index >= 0 && byte_index < int(sizeof(m_keymap)/sizeof(m_keymap[0])));			m_keymap[byte_index] |= mask;			// Notify listeners.			int i;			int n = m_listeners.size();			for (i = 0; i < n; i++)			{				smart_ptr<as_object_interface>	listener = m_listeners[i];				as_value	method;				if (listener != NULL				    && listener->get_member(event_id(event_id::KEY_DOWN).get_function_name(), &method))				{					call_method(method, NULL /* or root? */, listener.get_ptr(), 0, 0);				}			}		}		void	set_key_up(int code)		{			if (code < 0 || code >= key::KEYCOUNT) return;			int	byte_index = code >> 3;			int	bit_index = code - (byte_index << 3);			int	mask = 1 << bit_index;			assert(byte_index >= 0 && byte_index < int(sizeof(m_keymap)/sizeof(m_keymap[0])));			m_keymap[byte_index] &= ~mask;			// Notify listeners.			for (int i = 0, n = m_listeners.size(); i < n; i++)			{				smart_ptr<as_object_interface>	listener = m_listeners[i];				as_value	method;				if (listener != NULL				    && listener->get_member(event_id(event_id::KEY_UP).get_function_name(), &method))				{					call_method(method, NULL /* or root? */, listener.get_ptr(), 0, 0);				}			}		}		void	cleanup_listeners()		// Remove dead entries in the listeners list.  (Since		// we use weak_ptr's, listeners can disappear without		// notice.)		{			for (int i = m_listeners.size() - 1; i >= 0; i--)			{				if (m_listeners[i] == NULL)				{					m_listeners.remove(i);				}			}		}		void	add_listener(as_object_interface* listener)		{			cleanup_listeners();			for (int i = 0, n = m_listeners.size(); i < n; i++)			{				if (m_listeners[i] == listener)				{					// Already in the list.					return;				}			}			m_listeners.push_back(listener);		}		void	remove_listener(as_object_interface* listener)		{			cleanup_listeners();			for (int i = m_listeners.size() - 1; i >= 0; i--)			{				if (m_listeners[i] == listener)				{					m_listeners.remove(i);				}			}		}		int	get_last_key_pressed() const { return m_last_key_pressed; }	};	void	key_add_listener(const fn_call& fn)	// Add a listener (first arg is object reference) to our list.	// Listeners will have "onKeyDown" and "onKeyUp" methods	// called on them when a key changes state.	{		if (fn.nargs < 1)		{			log_error("key_add_listener needs one argument (the listener object)\n");			return;		}		as_object_interface*	listener = fn.arg(0).to_object();		if (listener == NULL)		{			log_error("key_add_listener passed a NULL object; ignored\n");			return;		}		key_as_object*	ko = (key_as_object*) (as_object*) fn.this_ptr;		assert(ko);		ko->add_listener(listener);	}	void	key_get_ascii(const fn_call& fn)	// Return the ascii value of the last key pressed.	{		key_as_object*	ko = (key_as_object*) (as_object*) fn.this_ptr;		assert(ko);		fn.result->set_undefined();		int	code = ko->get_last_key_pressed();		if (code > 0)		{			// @@ Crude for now; just jamming the key code in a string, as a character.			// Need to apply shift/capslock/numlock, etc...			char	buf[2];			buf[0] = (char) code;			buf[1] = 0;			fn.result->set_string(buf);		}	}	void	key_get_code(const fn_call& fn)	// Returns the keycode of the last key pressed.	{		key_as_object*	ko = (key_as_object*) (as_object*) fn.this_ptr;		assert(ko);		fn.result->set_int(ko->get_last_key_pressed());	}	void	key_is_down(const fn_call& fn)	// Return true if the specified (first arg keycode) key is pressed.	{		if (fn.nargs < 1)		{			log_error("key_is_down needs one argument (the key code)\n");			return;		}		int	code = (int) fn.arg(0).to_number();		key_as_object*	ko = (key_as_object*) (as_object*) fn.this_ptr;		assert(ko);		fn.result->set_bool(ko->is_key_down(code));	}	void	key_is_toggled(const fn_call& fn)	// Given the keycode of NUM_LOCK or CAPSLOCK, returns true if	// the associated state is on.	{		// @@ TODO		fn.result->set_bool(false);	}	void	key_remove_listener(const fn_call& fn)	// Remove a previously-added listener.

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人综合在线观看| 久久久天堂av| 国产亚洲人成网站| 亚洲韩国精品一区| 不卡视频免费播放| 2020日本不卡一区二区视频| 亚洲成人免费在线观看| 成人av网站在线观看| 26uuu色噜噜精品一区二区| 亚洲成精国产精品女| 一本久道久久综合中文字幕| 精品国产乱码久久久久久1区2区 | 91蝌蚪porny九色| 精品国产一区a| 日本视频一区二区三区| 色综合久久久久久久久| 国产精品久久久久久久久免费丝袜| 丁香婷婷综合激情五月色| 欧美肥胖老妇做爰| 亚洲高清免费一级二级三级| 97国产精品videossex| 国产精品久久久久久久浪潮网站| 秋霞电影一区二区| 欧美高清一级片在线| 一区二区视频在线| 91免费在线播放| 国产精品久久久久桃色tv| 成人一级片在线观看| 久久精品一区二区三区不卡牛牛| 激情小说欧美图片| 久久久久久99久久久精品网站| 激情六月婷婷久久| 久久精品视频在线免费观看| 国产一区二区三区在线观看免费 | 亚洲第一综合色| 欧美视频在线观看一区二区| 亚洲自拍偷拍九九九| 欧美系列亚洲系列| 五月婷婷激情综合| 日韩一区二区三区电影| 久久精品久久精品| 久久你懂得1024| 波多野结衣视频一区| 亚洲欧洲中文日韩久久av乱码| 99视频在线精品| 亚洲综合999| 日韩亚洲欧美在线| 国产成人在线色| 亚洲色图视频网| 7777精品伊人久久久大香线蕉| 秋霞影院一区二区| 国产视频一区在线观看| 91在线视频在线| 亚洲va中文字幕| 久久久三级国产网站| 色婷婷综合久久久| 免费精品视频最新在线| 久久久久久亚洲综合影院红桃| 国产精品18久久久| 亚洲激情六月丁香| 日韩一区二区电影在线| 成人深夜福利app| 婷婷开心久久网| 久久精品夜色噜噜亚洲aⅴ| 99re热这里只有精品免费视频| 性久久久久久久久久久久| 欧美v亚洲v综合ⅴ国产v| 99国产精品国产精品毛片| 日韩成人一级片| 国产精品色在线| 91精品综合久久久久久| 97国产精品videossex| 蜜臀久久99精品久久久久久9| 欧美国产欧美综合| 欧美色倩网站大全免费| 成人精品电影在线观看| 日韩电影一二三区| 一区二区三区加勒比av| 久久这里只有精品首页| 欧美性猛交xxxxxxxx| 福利电影一区二区| 美女一区二区三区在线观看| 亚洲视频资源在线| 久久久久国色av免费看影院| 911精品国产一区二区在线| 成人免费毛片高清视频| 久久国产剧场电影| 五月天激情综合| 中文字幕一区二区三区在线观看| 日韩一区二区在线看片| 色婷婷久久久久swag精品 | 日韩精品在线一区二区| 一本一道综合狠狠老| 国产suv精品一区二区883| 日本亚洲免费观看| 亚洲一区二区中文在线| 亚洲天堂福利av| 亚洲国产精品二十页| 久久影视一区二区| 欧美一卡二卡三卡四卡| 欧美日韩和欧美的一区二区| 91婷婷韩国欧美一区二区| 成人a免费在线看| 成人精品免费视频| 成人一区二区三区在线观看| 国产精品乡下勾搭老头1| 国内精品久久久久影院色 | 92精品国产成人观看免费| 国产精华液一区二区三区| 美腿丝袜亚洲三区| 久久av资源网| 精久久久久久久久久久| 人人爽香蕉精品| 理论片日本一区| 久久av老司机精品网站导航| 五月天激情综合| 美女网站视频久久| 国产一区二区三区观看| 国产一区在线不卡| 国产福利91精品| 懂色av一区二区三区蜜臀| 福利91精品一区二区三区| av激情综合网| 91国偷自产一区二区三区观看| 在线免费精品视频| 欧美人动与zoxxxx乱| 91精品国产一区二区人妖| 精品久久久久久久久久久久包黑料| 欧美精品一区二区久久婷婷| 久久人人超碰精品| 国产精品久久久久影视| 亚洲品质自拍视频网站| 亚洲一区二区三区四区五区中文| 亚洲午夜久久久久久久久电影院| 偷窥少妇高潮呻吟av久久免费| 久久99国产精品久久99果冻传媒| 国产中文字幕精品| 91一区二区在线| 欧美一区二区三区系列电影| 久久九九国产精品| 亚洲欧美日韩久久| 免费在线看成人av| 成人免费观看视频| 欧美日韩一区在线| 欧美videofree性高清杂交| 亚洲国产成人一区二区三区| 亚洲女人****多毛耸耸8| 亚洲超碰精品一区二区| 国产麻豆9l精品三级站| 91美女片黄在线观看91美女| 日韩午夜在线播放| 亚洲欧美视频在线观看视频| 日本特黄久久久高潮| 97aⅴ精品视频一二三区| 日韩视频国产视频| 亚洲欧美区自拍先锋| 九九精品一区二区| 色综合久久综合中文综合网| 日韩你懂的在线播放| 亚洲欧洲中文日韩久久av乱码| 青青草91视频| 一本色道久久综合亚洲aⅴ蜜桃 | 日韩美女啊v在线免费观看| 视频在线观看一区| 成人黄色软件下载| 日韩一区二区免费高清| 一区二区三区在线播放| 国产成人h网站| 欧美xxxxxxxx| 日本aⅴ亚洲精品中文乱码| 成人黄色在线视频| 久久这里只有精品视频网| 日本va欧美va精品| 欧美优质美女网站| 亚洲欧洲美洲综合色网| 国产九色sp调教91| 日韩一区国产二区欧美三区| 亚洲国产一区二区三区青草影视| 成人精品国产福利| 久久久久久亚洲综合影院红桃| 青青草视频一区| 欧美精品久久天天躁| 亚洲综合色丁香婷婷六月图片| 成人网在线免费视频| 国产午夜精品一区二区| 国产呦精品一区二区三区网站| 8v天堂国产在线一区二区| 亚洲1区2区3区4区| 欧美色网一区二区| 亚洲午夜久久久久中文字幕久| 色婷婷综合久久久| 亚洲男人电影天堂| 一本色道久久综合亚洲aⅴ蜜桃| 国产精品亲子乱子伦xxxx裸| 国产精品中文字幕日韩精品| 精品粉嫩超白一线天av| 韩国中文字幕2020精品| 久久综合国产精品| 国产在线视频一区二区| 久久久99久久精品欧美|