当前位置:  编程技术>移动开发
本页文章导读:
    ▪给app加下时间限制        给app加上时间限制 NSDate * senddate=[NSDate date]; NSCalendar * cal=[NSCalendar currentCalendar]; NSUInteger unitFlags=NSDayCalendarUnit|NSMonthCalendarUnit|NSYearCalendarUnit; NSDateComponents * conponent= [cal components:unitF.........
    ▪ 9、CCAction        九、CCAction之前介绍CCNode的时候说过,动作是指在特定时间内完成移动、缩放、旋转等操作的行为,节点可以通过运行动作来实现动画效果,这里的动作就是指CCAction对象,它有很多的子类,.........
    ▪ MobCtrl万能遥控-手机统制电脑软件简介       MobCtrl万能遥控-手机控制电脑软件简介MobCtrl万能遥控手机远程控制电脑软件详细介绍 作者:郑海波 zhb931706659@126.com 视频演示地址:   http://v.youku.com/v_show/id_XNDgyNzcwNjY4.html MobCtrl万能遥控(.........

[1]给app加下时间限制
    来源: 互联网  发布时间: 2014-02-18
给app加上时间限制
 NSDate *  senddate=[NSDate date];
    NSCalendar  * cal=[NSCalendar  currentCalendar];
    NSUInteger  unitFlags=NSDayCalendarUnit|NSMonthCalendarUnit|NSYearCalendarUnit;
    NSDateComponents * conponent= [cal components:unitFlags fromDate:senddate];
    NSInteger year=[conponent year];
    NSInteger month=[conponent month];
    NSInteger day=[conponent day];
    int dayNum = year*10000+month*100+day;
    if(dayNum>20130222&&dayNum<20130310)
    {
    
     if(g_sqlite==nil)
     {
        g_sqlite = [[CSqlite alloc]init];
        [g_sqlite openSqlite];
     }
    }
    else{
        UIAlertView *alert = [[UIAlertView alloc]initWithTitle:nil message:@"您当前使用的是测试版本,已过测试期限,请联系开发商" delegate:self cancelButtonTitle:@"确定" otherButtonTitles: nil];
        [alert show];
    }


    
[2] 9、CCAction
    来源: 互联网  发布时间: 2014-02-18
九、CCAction

之前介绍CCNode的时候说过,动作是指在特定时间内完成移动、缩放、旋转等操作的行为,节点可以通过运行动作来实现动画效果,这里的动作就是指CCAction对象,它有很多的子类,每个子类都封装了不同的动作效果。

先来看看CCAction的继承结构图

这里我省略了瞬时动作(CCActionInstant)和间隔动作(CCActionInterval)的子类,因为它们又包含了非常多的子类,待会再介绍它们的子类。

CCAction和CCFiniteTimeAction都是抽象类,只定义了一些基本属性和方法,没有实际用途,我们需要使用它们的子类来初始化动作,然后运行到节点上。


间隔动作 间隔动作就是指需要经过一段时间才能完成的动作,所有的间隔动作都继承自CCActionInterval。比如CCRotateBy,可以在指定时间内旋转指定的角度

// 1秒内顺时针旋转360°
CCRotateBy *rotate = [CCRotateBy actionWithDuration:1 angle:360];
[sprite runAction:rotate];


间隔动作的继承结构图:(只列出部分常用的)


由于CCActionInterval的子类太多了,这里就不一一介绍了,可以查阅下API文档

下面列举一下常见的CCActionInterval的子类:

1.CCBlink

闪烁效果

// 5秒内闪烁20次
CCBlink *blink = [CCBlink actionWithDuration:5 blinks:20];
[sprite runAction:blink];

2.CCMoveBy和CCMoveTo

CCMoveBy是移动一段固定的距离,CCMoveTo是移动到指定的位置

// 在1秒内,向右移动100单位,同时向上移动80单位
CCMoveBy *moveBy = [CCMoveBy actionWithDuration:1 position:CGPointMake(100, 80)];

// 在1秒内,从节点的当前位置移动到(100, 80)这个位置
CCMoveTo *moveTo = [CCMoveTo actionWithDuration:1 position:CGPointMake(100, 80)];

3.CCRotateBy和CCRotateTo

CCRotateBy是在当前旋转角度的基础上再旋转固定的角度,CCRotateTo是从当前旋转角度旋转到指定的角度

假设精灵在初始化的时候已经顺时针旋转了45°

sprite.rotation = 45;


如果使用了CCRotateBy

CCRotateBy *rotateBy = [CCRotateBy actionWithDuration:1 angle:90];
[sprite runAction:rotateBy];

// 在1秒内,再顺时针旋转90°,那么sprite的最终旋转角度是45° + 90° = 135°

如果使用了CCRotateTo
CCRotateTo *rotateTo = [CCRotateTo actionWithDuration:1 angle:90];
[sprite runAction:rotateTo];

// 在1秒内,顺时针旋转到90°,sprite的最终旋转角度就是90°

4.CCScaleBy和CCScaleTo

CCScaleBy是在当前缩放比例的基础上再缩放固定的比例,CCScaleTo是从当前缩放比例缩放到指定的比例

假设精灵在初始化的时候的缩放比例为0.8

sprite.scale = 0.8;

如果使用了CCScaleBy
CCScaleBy *scaleBy = [CCScaleBy actionWithDuration:1 scale:0.5];
[sprite runAction:scaleBy];
// 在1秒内,宽度和高度再缩小50%,那么sprite最终缩放比例是0.8 * 0.5 = 0.4

如果使用了CCScaleTo

CCScaleTo *scaleTo = [CCScaleTo actionWithDuration:1 scale:0.5];
[sprite runAction:scaleTo];
// 在1秒内,宽度和高度缩小为0.5倍,那么sprite最终缩放比例是就0.5

5.CCFadeIn和CCFadeOut和CCFadeTo

CCFadeIn是淡入,即由暗转亮,从没有到有;CCFadeOut是淡出,即由亮转暗,从有到没有;CCFadeTo用来修改节点的不透明度

// 在2秒内,从没有到有
CCFadeIn *fadeIn = [CCFadeIn actionWithDuration:2];

// 在2s内,从有到没有
CCFadeOut *fadeOut = [CCFadeOut actionWithDuration:2];

// 在2s内,不透明度变为120,即变为半透明 (不透明度取值范围是0-255)
CCFadeTo *fadeTo = [CCFadeTo actionWithDuration:2 opacity:120];


6.CCRepeat

重复执行某个动作,可以指定重复的次数

// 1秒中顺时针旋转360°
CCRotateBy *rotateBy = [CCRotateBy actionWithDuration:1 angle:360];
// 重复执行2次旋转动画
CCRepeat *repeat = [CCRepeat actionWithAction:rotateBy times:2];

[sprite runAction:repeat];

7.CCAnimate

按顺序地播放图片,可以实现帧动画。

例如有下面10张图片:(玩过街机的同学应该很熟悉,赵云的大鹏展翅)

不难发现,如果从1.png 到 10.png按顺序显示图片的话会形成一个动画

下面用CCAnimate实现动画效果

// 用来存放所有的帧
NSMutableArray *frames = [NSMutableArray array];
// 加载所有的图片
for (int i = 1; i<= 10; i++) {
    // 文件名
    NSString *name = [NSString stringWithFormat:@"zy.bundle/%i.png", i];
    // 根据图片名加载纹理,一个图片对应一个纹理对象
    CCTexture2D *texture = [[CCTextureCache sharedTextureCache] addImage:name];
    // 根据纹理初始化一个帧
    CGRect retct = CGRectMake(0, 0, texture.contentSize.width, texture.contentSize.height);
    CCSpriteFrame *frame = [[[CCSpriteFrame alloc] initWithTexture:texture rect:retct] autorelease];
    // 添加帧到数组中
    [frames addObject:frame];
}

// 根据帧数组初始化CCAnimation,每隔0.1秒播放下一张图片
CCAnimation *animation = [CCAnimation animationWithFrames:frames delay:0.1];

// 根据CCAnimation对象初始化动作
CCAnimate *animate = [CCAnimate actionWithAnimation:animation];

[sprite runAction:animate];
动画效果如下:

这里是将10帧分为10张不同的png图片。为了性能着想,其实最好将10帧打包成一个图片,到时从这张图片上面切割每一帧,这种图片我们可以称为"纹理相册",可以用TexturePacker制作纹理相册


8.CCSequence

一般情况下,如果给节点同时添加几个动作时,它们会同时运行。比如下面的代码效果是一边旋转一边缩放

CCRotateBy *rotateBy = [CCRotateBy actionWithDuration:1 angle:360];
CCScaleBy *scaleBy = [CCScaleBy actionWithDuration:1 scale:2];

[sprite runAction:rotateBy];
[sprite runAction:scaleBy];
但是有时候我们想让动作一个接着一个运行,那么就要用到CCSequence
下面演示的效果是,让精灵先变为红色,再从红色变为绿色,再从绿色变为蓝色

CCTintTo *tintTo1 = [CCTintTo actionWithDuration:1 red:255 green:0 blue:0];
CCTintTo *tintTo2 = [CCTintTo actionWithDuration:1 red:0 green:255 blue:0];
CCTintTo *tintTo3 = [CCTintTo actionWithDuration:1 red:0 green:0 blue:255];
// CCTintTo也是CCActionInterval的子类,可以用于更改精灵的颜色。

CCSequence *sequence = [CCSequence actions:tintTo1, tintTo2, tintTo3, nil];
[sprite runAction:sequence];
CCSequence会按顺序执行参数中传入的所有动作


9.CCActionEase

当对节点使用CCMoveTo动作时,它会匀速移动到目的地,如果使用CCActionEase就可以使节点由慢到快或者由快到慢地移向目的地。因此CCActionEase是用来改变动作的运行时速度的。

CCActionEase是个非常强大的类,子类非常多,这里只说明其中的几个:

CCEaseIn:由慢到快

CCEaseOut:由快到慢

CCEaseInOut:先由慢到快,再由快到慢

举个代码例子:

CCMoveTo *moveTo = [CCMoveTo actionWithDuration:4 position:ccp(300, 200)];
CCEaseInOut *easeInOut = [CCEaseInOut actionWithAction:moveTo rate:5];
[sprite runAction:easeInOut];
你会看到精灵先由慢到快,再由快到慢。rate参数决定了速率变化的明显程度,当它大于1时才有效


10.CCGridAction

使用CCGridAction的具体子类可以实现三维效果,例如翻页效果(CCPageTurn3D)、波浪效果(CCWaves)、流体效果(CCLiquid)。虽然能实现很好看的3D效果,但是它有很大的缺点,如果不启用深度缓冲,3D效果会有些失真,如果启用了深度缓冲,会特别耗内存。

如果想开启深度缓冲的话,就要修改EAGLView的初始化参数depthFormat:

EAGLView *glView = [EAGLView viewWithFrame:[window bounds]
								   pixelFormat:kEAGLColorFormatRGB565	
								   depthFormat:GL_DEPTH_COMPONENT24_OES];
可以改为GL_DEPTH_COMPONENT16_OES(16位深度缓冲)或者GL_DEPTH_COMPONENT24_OES(24位深度缓冲),16位深度缓冲占用的内存较少,但是仍然会有些失真


瞬时动作

瞬时动作(CCActionInstant)是指能够瞬间完成的动作,可用于改变节点位置、翻转节点形成镜像、设置节点的可视性等。

下面大致看下瞬时动作的继承结构图:


看完这个图,你可能觉得CCActionInstant好像没有一点使用价值,因为它的好多动作都可以通过修改节点属性来完成。比如可以通过设置节点的visible属性来代替使用CCShow\CCHide\CCToggleVisibility、可以通过修改节点的position属性来代替使用CCPlace。其实当它们与CCSequence结合使用时才有价值。比如,我们想先让节点运行一个CCMoveTo移动到某个位置,移动完毕后再隐藏节点,这时候我们就可以将CCMoveTo、CCHide两个动作按顺序放进CCSequence中达到想要的效果。

// 移动到(300, 200)
CCMoveTo *moveTo = [CCMoveTo actionWithDuration:2 position:ccp(300, 200)];
// 隐藏节点
CCHide *hide = [CCHide action];

CCSequence *sequence = [CCSequence actions:moveTo, hide, nil];

[sprite runAction:sequence];

有时候,在一个动作序列(CCSequence)里面,我们需要在一个动作运行完毕后,调用某个方法执行一些操作,然后再执行下一个动作。那我们就可以结合CCCallFunc和CCSequence完成这个功能。

比如,我们让精灵先变为红色,再从红色变为绿色,再从绿色变为蓝色,而且在每次变换颜色后都调用某个方法执行一些操作:

// 变为红色
CCTintTo *tintTo1 = [CCTintTo actionWithDuration:2 red:255 green:0 blue:0];
// 变为红色后调用self的turnRed方法
CCCallFunc *fn1 = [CCCallFunc actionWithTarget:self selector:@selector(turnRed)];

// 变为绿色
CCTintTo *tintTo2 = [CCTintTo actionWithDuration:2 red:0 green:255 blue:0];
// 变为绿色后调用self的turnGreen:方法,参数是运行当前动作的节点
CCCallFuncN *fn2 = [CCCallFuncN actionWithTarget:self selector:@selector(turnGreen:)];

// 变为蓝色
CCTintTo *tintTo3 = [CCTintTo actionWithDuration:2 red:0 green:0 blue:255];
// 变为蓝色后调用self的turnBlue:data:方法,第一个参数是运行当前动作的节点,第二个参数是data的值
CCCallFuncND *fn3 = [CCCallFuncND actionWithTarget:self selector:@selector(turnBlue:data:) data:@"blue"];

// 最后调用turnDone:方法,传递了一个@"done"字符串作为参数
CCCallFuncO *fn4 = [CCCallFuncO actionWithTarget:self selector:@selector(turnDone:) object:@"done"];

CCSequence *sequence = [CCSequence actions:tintTo1, fn1, tintTo2, fn2, tintTo3, fn3, fn4, nil];
[sprite runAction:sequence];
下面是回调方法的实现:

- (void)turnRed {
    NSLog(@"变为红色");
}

// node是运行当前动作的节点
- (void)turnGreen:(id)node {
    NSLog(@"变为绿色:%@", node);
}

// node是运行当前动作的节点
- (void)turnBlue:(id)node data:(void *)data {
    NSLog(@"变为蓝色,%@,%@", node, data);
}

- (void)turnDone:(id)param {
    NSLog(@"变换完毕:%@", param);
}
你会发现,精灵变为红色后就会调用turnRed方法,变为绿色后会调用turnGreen:方法,变为蓝色后会先调用turnBlue:data:方法,最后调用turnDone:方法

最后做一个总结:

下面这几个类都会在运行动作时调用一个方法

CCCallFunc :调用方法时不传递参数

CCCallFuncN :调用方法时,可以传递1个参数,参数值是运行当前动作的节点

CCCallFuncND :调用方法时,可以传递2个参数,第1个参数是运行当前动作的节点,第2个参数是actionWithTarget:selector:data:方法中的data值

CCCallFuncO :调用方法时,可以传递1个参数,参数值是actionWithTarget:selector:object:方法中的object值


CCRepeatForever

CCRepeatForever直接继承自CCAction,可以不停地运行某个间隔动作(CCActionInterval)。

如果你想让精灵不停地旋转,可以这样写:

// 1秒内顺时针旋转360°
CCRotateBy *rotate = [CCRotateBy actionWithDuration:1 angle:360];
// 使用CCRepeatForever重复CCRotateBy动作
CCRepeatForever *repeat = [CCRepeatForever actionWithAction:rotate];
[sprite runAction:repeat];
也能够利用CCRepeatForever重复一个动作序列(CCSequence)

// 变为红色
CCTintTo *tintTo1 = [CCTintTo actionWithDuration:1 red:255 green:0 blue:0];
// 变为绿色
CCTintTo *tintTo2 = [CCTintTo actionWithDuration:1 red:0 green:255 blue:0];
// 变为蓝色
CCTintTo *tintTo3 = [CCTintTo actionWithDuration:1 red:0 green:0 blue:255];
CCSequence *sequence = [CCSequence actions:tintTo1, tintTo2, tintTo3, nil];

CCRepeatForever *repeat = [CCRepeatForever actionWithAction:sequence];

[sprite runAction:repeat];

你会发现精灵的颜色状态是:红 -> 绿 -> 蓝 -> 红 -> 绿 -> 蓝 -> 红 ...,一直在红绿蓝3种颜色之间按顺序切换


CCSpeed

CCSpeed也是直接继承自CCAction,可以影响间隔动作(继承自CCActionInterval的动作)的运行速度。

// 1秒内顺时针旋转360°
CCRotateBy *rotate = [CCRotateBy actionWithDuration:1 angle:360];
// 速度变为原来的一半
CCSpeed *speed = [CCSpeed actionWithAction:rotate speed:0.5];
[sprite runAction:speed];
本来1秒就完成旋转的,设置speed为0.5后,就需要2秒才能完成旋转


    
[3] MobCtrl万能遥控-手机统制电脑软件简介
    来源: 互联网  发布时间: 2014-02-18
MobCtrl万能遥控-手机控制电脑软件简介

MobCtrl万能遥控手机远程控制电脑软件详细介绍

作者:郑海波 zhb931706659@126.com

视频演示地址:   http://v.youku.com/v_show/id_XNDgyNzcwNjY4.html


MobCtrl万能遥控(手机和电脑端)软件下载:

地址一: http://pan.baidu.com/share/link?shareid=309241&uk=2349351016

 

地址二:  http://dl.vmall.com/c0m1rb1kck

地址三: http://www.gxp.cc/file-2564119.html

CSDN用户免费下载:http://download.csdn.net/detail/nuptboyzhb/5090465

 

安卓手机APK下载


手机当鼠标用?手机当键盘用?手机查看电脑的桌面?手机控制电脑每一个文件的运行?手机查看电脑摄像头的实时画面?用手机控制电脑的关机重启?用手机控制PPT播放,音视频播放,以及所有电脑程序的播放?这一切都不是问题!MobCtrl帮您实现各种奇炫功能!!MobCtrl将给您带来无穷的乐趣,让您感受到科技的魅力!神奇的功能超出您的想象!!亲,赶快下载享用吧,永久免费哦!!

功能简介:

*获取电脑的文件系统。对系统的任一文件进行打开(比如播放PPT,电影等)、删除、下载等操作。
*实时查看电脑的桌面,在android设配上显示桌面的情况,并可以在手机上可视化操作。
*获取电脑的摄像头的画面,远程控制电脑摄像头的拍摄,并将拍摄的画面实时显示在android设配上。
*获取电脑当前正在运行的所有窗口,对窗口进行关闭、最大化、最小化等操作,同时可以对窗口进行截图,并在android设配上显示。
*模拟鼠标的输入。此时的android设配相当于一个无线鼠标。实现光标的移动,单击,双击等。
*模拟键盘的输入。此时的android设配相等于一个无线键盘。实现按键的模拟。
*控制电脑的关机,重启等其他操作。
*获取电脑的进程,并可以对任一进程进行强制关闭。
*获取电脑所安装的软件列表。

 

l      连接电脑说明(使用说明):

两种连接方式任选其一即可:

方法一. 路由器方法

1.将电脑连接在路由器上,打开电脑端软件MobCtrl.exe,然后点击“启动服务器”按钮(密码可设置为空)。

2.手机上安装MobCtrl.apk,将手机wifi打开,选择和电脑相同的wifi

3.在手机上打开MobCtrl软件,输入电脑端的IP地址(电脑端软件上显示的有如:10.10.145.157等),然后点击登录即可

注意:为了安全起见,您可以设置密码,但软件登录的时候需要输入该密码。

方法二.无线局域网

将手机wifi和电脑都连接在相同的局域网(如学校、企业或家庭的内部网络)。安照上述方法一中的步骤即可使用。

任何疑问可以联系客服:mobctrl@126.com

l      登陆界面介绍

下图电脑端软件和手机端软件的截图。首先启动电脑端软件,改程序会自动获取电脑的IP地址,用户只需要点击启动服务器即可。其次,打开手机wifi,连接到与电脑相同的wifi网络上。然后打开手机端软件,输入服务器端显示的IP地址和服务器端设置的密码。点击登录即可。


l      功能介绍

1.获取电脑的文件系统。

运行文件:对系统的任一文件进行运行(比如播放PPT、电影等,也可以运行电脑上的QQ、浏览器等软件),程序运行后,可以结合后面的功能,进行控制。

删除文件:点击后,所选文件将会被删除!请谨慎选择呀!

下载文件:下载该文件到手机中。保存路径是:/sdcard/nuptboyzhb/文件名XX

注意:当网速不好时,部分盘符或文件夹显示不全,刷新一下就好啦!!

2.实时查看电脑的桌面。


在“查看桌面”选项下,如图3所示,可以手动更新电脑桌面、截屏、获取电脑摄像头的实时画面、对获取桌面惊醒放大和缩小、可以返回和或者强制返回到上一层。

--在“查看桌面”选项下,点击“电脑摄像头”按钮,即可远程查看电脑摄像头的画面,实时显示在android手机上,如图4所示。

--在“查看桌面”选项下,点击“手动更新”按钮,可以手动更新当时的电脑桌面,对电脑桌面进行实时显示。

--在“查看桌面”选项下,点击“返回”或”强制返回“按钮,可以返回到上一层,即返回到软件操作主页。

--在“查看桌面”选项下,点击“截图”按钮,可以获取当前电脑的操作界面,并可以对截图进行保存。

--在“查看桌面”选项下,点击“放大”或者“缩小”按钮,可以对当前获得的画面进行放大或者缩小

在android设配上显示桌面的情况。可以直接在手机屏幕上操作电脑,单击双击手机屏幕,即可实现电脑屏幕上的单击双击,长按手机屏幕即实现邮件功能,并可以对截图进行保存。

3.模拟键盘的输入。

点击“模拟键盘”选项卡,此时的安卓手机相当于一个无线键盘。如图5,可以输入文字等。

4.模拟鼠标的输入。

点击“模拟鼠标”选项卡,此时的安卓手机相当于一个无线鼠标。实现光标的移动,单击,双击等。

控制电脑的关机,重启等其他操作。

--在“模拟鼠标”选项下,点击“关机”按钮,电脑就关机了!

--在“模拟鼠标”选项下,点击“重启”按钮,电脑就重启了!

5.获取电脑当前正在运行的所有窗口


对窗口进行关闭、最大化、最小化等操作,同时可以对窗口进行截图,并在手机上显示。

6.上传文件

  可以将手机上的文件上传的电脑上,点击“上传文件”选项卡,选择手机上的文件即可上传。


7.查看电脑的进程

并可以对任一进程进行强制关闭。(windows系统进程不要关闭哈)


8.获取电脑所安装的软件列表。


l      声明

用户使用该软件,不得从事盗取他人信息、非法监控监听以及破坏他人计算机等非法目的,否者后果自负!

问题反馈:mobctrl@126.com

开发合作咨询:zhb931706659@126.com

CSDN博客:http://blog.csdn.net/nuptboyzhb/

新浪微博:http://weibo.com/u/2984050990




1楼zengjunqi1989前天 22:10好像挺实用的啊,等有机会试试,嘿嘿Re: NUPTboyZHB昨天 20:14回复zengjunqi1989n嗯呢,好的!

    
最新技术文章:
▪Android开发之登录验证实例教程
▪Android开发之注册登录方法示例
▪Android获取手机SIM卡运营商信息的方法
▪Android实现将已发送的短信写入短信数据库的...
▪Android发送短信功能代码
▪Android根据电话号码获得联系人头像实例代码
▪Android中GPS定位的用法实例
▪Android实现退出时关闭所有Activity的方法
▪Android实现文件的分割和组装
▪Android录音应用实例教程
▪Android双击返回键退出程序的实现方法
▪Android实现侦听电池状态显示、电量及充电动...
▪Android获取当前已连接的wifi信号强度的方法
▪Android实现动态显示或隐藏密码输入框的内容
▪根据USER-AGENT判断手机类型并跳转到相应的app...
▪Android Touch事件分发过程详解
▪Android中实现为TextView添加多个可点击的文本
▪Android程序设计之AIDL实例详解
▪Android显式启动与隐式启动Activity的区别介绍
▪Android按钮单击事件的四种常用写法总结
▪Android消息处理机制Looper和Handler详解
▪Android实现Back功能代码片段总结
▪Android实用的代码片段 常用代码总结
▪Android实现弹出键盘的方法
▪Android中通过view方式获取当前Activity的屏幕截...
▪Android提高之自定义Menu(TabMenu)实现方法
▪Android提高之多方向抽屉实现方法
▪Android提高之MediaPlayer播放网络音频的实现方法...
▪Android提高之MediaPlayer播放网络视频的实现方法...
▪Android提高之手游转电视游戏的模拟操控
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3