一个动作类网游排行榜包括多个业务方法可以使用哪些方法配置动作

北通神鹰参数
只显示摘要
人体工程学
设置连发:按住TUBRO键,再按下某一个或多个动作键,则相应动作键具有连发功能(按住该动作键将连续发出动作);清除连发:按住CLEAR键,再按下某一个或多个已经设置好的具有连发功能的动作键,则相应动作键恢复普通功能。
按键接口即插即用人体工程学
精准型十字方向键+方向键+8常用动作键+4辅助动作键+双模拟摇杆+ANOLOG模式转换+TURBO连发设置+CLEAR连发清除
USB1.1/2.0Struts2培训笔记-博泰典藏网
典藏文档 篇篇精品
Struts2培训笔记
导读:Struts2培训笔记,Struts2培训笔记一、Struts2/ApacheStruts1简介:MVC一、Struts2发展史:核心技术是Webwork,Webwork原来是一个独立的开源项目,后来该项目捐赠给了Apache软件基金会,Apache就将它原来Struts与Webwork两个WebMVC框架进行整合,由于Struts出现的较早应用较广名声大,但它本身的设计没有后起之 Struts2培训笔记 一、 Struts2/Apache Struts1简介:MVC 一、 Struts2发展史:核心技术是Webwork,Webwork原来是一个独立的开源项目,后来该项目捐赠给了Apache软件基金会,Apache就将它原来Struts与Webwork两个Web MVC框架进行整合,由于Struts出现的较早应用较广名声大,但它本身的设计没有后起之秀Webwork优秀所以Struts2的核心是Webwork。
二、 两种声明式艄梗XML配置方式和JAVA注解方式(不好用) 三、 MVC模式:控制器、模型、视图 WEB浏览器 客户端 1.请求 控制器: web.xml StrutsPrepareAndExecuteFilter 2.从struts.xml 调用动作 4.呈现页面 模型 Action(动作) 视图 3.选择结果 Result(结果)
控制器部分还应该包括Struts的配置文件struts.xml;Action动作其实也可看作控制器同时也是模型对象。 四、工作原理
IE调用动作 结果 拦 截 器 栈 调用结果 拦截器OGNL 上图来源于Struts2官方站点,是Struts 2 的整体结构。 一个请求在Struts2框架中的处理大概分为以下几个步骤 1 客户端初始化一个指向Servlet容器(例如Tomcat)的请求 2 这个请求经过一系列的过滤器(Filter)(这些过滤器中有一个叫做ActionContextCleanUp的可选过滤器,这个过滤器对于Struts2和其他框架的集成很有帮助,例如:SiteMesh Plugin) 3 接着FilterDispatcher被调用,FilterDispatcher询问ActionMapper来决定这个请是否需要调用某个Action 4 如果ActionMapper决定需要调用某个Action,FilterDispatcher把请求的处理交给 动作 result结果 OGNL ActionContext ( ThreadLocal ) ValueStack request session attr parameters application
ActionProxy 5 ActionProxy通过Configuration Manager询问框架的配置文件,找到需要调用的Action类 6 ActionProxy创建一个ActionInvocation的实例。 7 ActionInvocation实例使用命名模式来调用,在调用Action的过程前后,涉及到相关拦截器(Intercepter)的调用。 8 一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果。返回结果通常是(但不总是,也可 能是另外的一个Action链)一个需要被表示的JSP或者FreeMarker的模版。在表示的过程中可以使用Struts2 框架中继承的标签。在这个过程中需要涉及到ActionMapper
在上述过程中所有的对象(Action,Results,Interceptors,等)都是通过ObjectFactory来创建的。
Struts处理过程的一些内部对象说明: 1. 客户端请求:高版本的Struts2已不推荐使用FilterDispatcher,而改用org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter。客户端请求最先由该过滤器处理。 2. StrutsPrepareAndExecuteFilter根据请求的路径信息创建一个ActiomMapper实例,而ActionMapper负责从struts.xml文件中找到要调用的
配置。 3. 接着框架会创建一个ActionProxy(Action代理实例),ActionProxy会通过ActionInvocation实例去调用Action对象的方法。也就是说框架不会直接调用Action方法而是通ActionProxy和ActionInvocation间接去完成Action的调用。可以把Action理解成一段.....配置信息的封装。 4. 框架会通过ActionProxy去获得一个ActionInvocation实例,每一次用户请求struts都会创建一个ActionInvocation对象。ActionInvocation将包含调用Action对象过程的相关信息,如调用过程前后的一系列相关的拦截器。 5. ActionInvocation的具体功能请参考本文档“第五节”。 二、 Action动作类 1) 2) HelloWorld示例 动作类的作用: a) b) c) 3) 4) 动作类封装工作单元:execute()方法执行操作 动作类作为数据转移的场所:属性存储数据 动作为结果路由选择返回控制字符串:页面导航 实现动作类的三种方式:实现Action接口、扩展ActionSupport、POJO,建议使用扩展ActionSupport的方式实现一个动作类,其好处是继承了众多的、便利的方法来获得框架提供的服务。 掌握struts.xml配置文件: a) b) 配置常量(也可以定义在struts.properties属性文件中):
配置包:名字空间必须唯一
<package name=\namespace=\ extends=\>
..........
c) d) e) f) g) 配置动作:<action name=\helloWorld\ class=\manning.chapterTwo.HelloWorld\配置结果:/chapterTwo/HelloWorld.jsp 配置拦截器:
配置全局结果: 配置全局异常: 三、 常用Result类型: 1. chain:动作链(转发方式),从一个动作转到另一个动作上去执行。 实现类:com.opensymphony.xwork2.ActionChainResult
2. dispatcher(默认结果类型):转发,使用RequestDispatcher来转发或包含。 实现类:org.apache.struts2.dispatcher.ServletDispatcherResult 3. redirect:重定向,实际上调用response.sendRedirect(..)完成,这样意味着会丢失当前请求中的数据,必要时需要URL编码来传参。 实现类:org.apache.struts2.dispatcher.ServletRedirectResult
4. redirectAction:类似redirect结果类型,但比redirect结果要好,因为在struts.xml配置文件中无需去编码URL,建义使用该结果类型而不用redirect类型。 实现类:org.apache.struts2.dispatcher.ServletActionRedirectResult
5. stream:流结果类型,可供用户下载文件,有多个参数配置。 实现类:org.apache.struts2.dispatcher.StreamResult 6. plaintext:无格式文本,通常用于显示原文件(JSP,HTML)的内容。 7. 等等 有关各种Result的配置参照:API中com.opensymphony.xwork2.Result接口各实现类的详细说明。 结果类型 chain 动作链 配置参数 ? ? ? <param name=\<param name=\ <param name=\method on target action to be invoked. If null, this defaults to execute method 包含总结汇报、出国留学、自然科学、高中教育、行业论文、计划方案、医药卫生、高等教育以及Struts2培训笔记等内容。本文共4页
相关内容搜索暗黑3新手教程:怎样才能自由配置所有技能 _多玩暗黑破坏神3
专区推荐:
您的当前位置:>>>暗黑3新手教程:怎样才能自由配置所有技能
暗黑3新手教程:怎样才能自由配置所有技能
15:51:54 条|来源:多玩|作者:风语
不能自由搭配技能怎么办? 下面的内容教你怎样合理配置所有技能。
  小编发现很多玩家都吐槽3的技能按键设置非常不合理,限制的太死。比如有的玩家喜欢鼠标右键是防御技能,可是在界面中就是无法选择。所以在此有必要详细介绍一下技能设定的方法,教新手玩家怎样自由设置所有技能。
  的技能条如下图:
  红圈位置是技能设置
  打开技能设置界面(快捷键S):
  可以看到总共有6个按键供玩家选择,分别是&鼠标左键&、&鼠标右键&、&数字键1&、&数字键2&、&数字键3&、&数字键4&。
  当你想设置鼠标左键的技能时,点击第一个方框就能打开相应的界面:
  玩家可以发现只有4个技能供你选择,也就是说鼠标左键只能设置图中4个技能中的一个。如果不调整设定的话,玩家是无法将鼠标左键的技能修改为其他更多的技能。(这系统默认还真是有点坑爹啊)
  下面教你怎样自由设置技能,首先打开游戏设定界面,将&自定技能配置&勾选,如下图:
  勾选以后,再次打开技能界面,你会发现界面的左右两边多了一个按键,完全可以自由设定所有技能!如下图:
  你可以将鼠标左键和右键更改为强力攻击技能,数字键1、2、3、4全部更改为防御技能,总之就是自由搭配,毫无限制。
  小编建议玩家都勾选自定技能配置,这样才能更合理的搭配技能,特别是到了后期有了更多技能的时候。
最新新闻NEWS
最新图集PICTURE
专题推荐SUBJECT
官方蓝贴BLIZZAD
攻略技巧RAIDERS
精彩视频VIDEOSCopyright &
. All Rights Reserved. 如果侵犯您的隐私,请来信通知,!E-Mail:1498人阅读
Javaweb(58)
一、Action动作类(一般用**Action结尾)
struts2 的Action可以是POJO(Plain Old Java Object)
为了让用户开发的Action更加规范struts2提供了一个Action接口
通过method属性指定Action执行方法
没有指定method属性,默认执行execute方法
&action name="addCustomer" class="xgp.struts.actions.CustomerAction" /&
通过method属性,指定调用Action相应方法处理请求
&action name="addCustomer" class="xgp.struts.actions.CustomerAction" method="add"&
因为指定了method=”add”,所以HelloAction的ass方法会被调用.
1、编写动作类的三种方式
a、第一种方法是,动作类不实现、也不继承任何的接口和类。即动作类是一个非常普通的JavaBean。
public class HelloAction {
public String sayHello(){
System.out.println("动作类执行了,访问成功!");
return "success";
b、动作类实现com.opensymphony.xwork2.Action接口。可以使用常量
Action接口:
public static final String SUCCESS = "success";
public static final String NONE = "none";
public static final String ERROR = "error";
public static final String INPUT = "input";
public static final String LOGIN = "login";
public String execute() throws E
c、继承com.opensymphony.xwork2.ActionSupport(开发中建议)
Struts2为Action接口提供了一个实现类 ActionSupport,定义了 表单域校验、错误信息设置和获得国际化信息相关一些方法
public class ActionSupport implements Action, Validateable, ValidationAware, TextProvider, LocaleProvider, Serializable {
protected static Logger LOG = LoggerFactory.getLogger(ActionSupport.class);
private final ValidationAwareSupport validationAware = new ValidationAwareSupport();
private transient TextProvider textP
public void setActionErrors(Collection&String& errorMessages) {
validationAware.setActionErrors(errorMessages);
public Collection&String& getActionErrors() {
return validationAware.getActionErrors();
public void setActionMessages(Collection&String& messages) {
validationAware.setActionMessages(messages);
public Collection&String& getActionMessages() {
return validationAware.getActionMessages();
2、动作类中的动作方法
a、必须是public的
b、必须返回String类型的
c、必须没有参数
3.动作类的生命周期
动作类每次访问都会重新被实例化,是线程安全的。
public class HelloAction {
public HelloAction() {
System.out.println("执行构造函数HelloAction,实例化对象。");
public String sayHello(){
System.out.println("动作方法sayHello执行了,访问成功!");
return "success";
测试结果:
二、动作类中动作方法的调用
动作方法:动作类中的定义的处理业务有关的方法
实例:模拟一个curd的动作类
工程目录如下:
1、新建一个 curd.jsp
2、在struts.xml中配置
如下图所示:
&constant name="struts.devMode" value="true" /&
&package name="p1" extends="struts-default" namespace="/customer"&
&action name="addCustomer" class="xgp.struts.actions.CustomerAction" method="add"&
&result name="success" type="dispatcher"&/addCustomer.jsp&/result&
&result name="error" type="dispatcher"&/error.jsp&/result&
&action name="editCustomer" class="xgp.struts.actions.CustomerAction" method="edit"&
&result name="success" type="dispatcher"&/editCustomer.jsp&/result&
&action name="findCustomer" class="xgp.struts.actions.CustomerAction" method="find"&
&result name="success" type="dispatcher"&/findCustomer.jsp&/result&
&action name="delCustomer" class="xgp.struts.actions.CustomerAction" method="del"&
&result name="success" type="dispatcher"&/delCustomer.jsp&/result&
&/package&
3、建立动作处理类CustomerAction
package xgp.struts.
import xgp.struts.service.BusinessS
import xgp.struts.serviceImpl.BusinessServiceI
import com.opensymphony.xwork2.ActionS
public class CustomerAction extends ActionSupport{
private BusinessService bs = new BusinessServiceImpl();
public String add(){
return SUCCESS;
} catch (Exception e) {
return ERROR;
public String edit(){
bs.edit();
return SUCCESS;
public String find(){
bs.find();
return SUCCESS;
public String del(){
return SUCCESS;
4、建立相应的业务接口BusinessService和实现类BusinessServiceImpl
BusinessService
package xgp.struts.
public interface BusinessService {
public void add();
public void edit();
public void del();
public Object find();
BusinessServiceImpl
package xgp.struts.serviceI
import xgp.struts.service.BusinessS
public class BusinessServiceImpl implements BusinessService{
public void add() {
System.out.println("Serviece的add方法执行成功!");
public void edit() {
System.out.println("Serviece的edit方法执行成功!");
public void del() {
System.out.println("Serviece的del方法执行成功!");
public Object find() {
System.out.println("Serviece的find方法执行成功!");
return null;
结果如下:
1、使用通配符配置Action
在配置&action...&元素时,允许在指定name属性时,使用模式字符串(用"*"代表一个或多个任意字符)
在class、method属性及&result&子元素中通过 {N} 形式代表前面地N个* 匹配子串
例如上面的案例中struts.xml我们可以改写如下:
/{1}{2}.jsp
2、使用Action的动态方法调用(官方不建议使用)
动态方法调用:DMI
希望执行CustomerAction的add动作方法(动态方法调用)
动态方法调用:Struts2框架默认是禁止的。可以通过配置一个常量打开它:
&constant name="struts.enable.DynamicMethodInvocation" value="true"&&/constant&
通过url动态指定调用Action哪个方法而无需配置&action&的method属性, 通过 !方法名 指定调用Action哪个方法
3、配置默认Action和 配置Action默认处理类
用户可以为每个package定义一个默认的Action,如果访问路径在package没有匹配&action& 就会执行默认action
&default-action-ref name="defaultAction"&&/default-action-ref&
&action name="defaultAction"&
&result name="success" type="dispatcher"&/whatareuwant.jsp&/result&
如果配置&action& 没有指定class属性,就会执行Action的默认处理类,在struts-default.xml中.
指定默认的动作处理类
/success.jsp
/whatareuwant.jsp
三、在动作类中访问ServletAPI
Struts2的Action没有与任何Servlet API耦合,便于测试.这是他的优点之一.
1、三大实现方法
1、ActionContext
getContext() 返回ActionContext实例对象
get(key) 相当于 HttpServletRequest的getAttribute(String name)方法
put(String,Object) 相当于HttpServletRequest的setAttribute方法
getApplication() 返回一个Map对象,存取ServletContext属性
getSession() 返回一个Map对象,存取HttpSession属性
getParameters() 类似调用HttpServletRequest的getParameterMap()方法
setApplication(Map) 将该Map实例里key-value保存为ServletContext的属性名、属性值
setSession(Map) 将该Map实例里key-value保持为HttpSession的属性名、属性值
2、方式二:(简单,推荐使用)使用ServletActionContext
static PageContext getPageContext()
static HttpServletRequest getRequest()
static HttpServletResponse getResponse()
static ServletContext getServletContext()
该方案可避免Action类实现XxxAware接口,但Action依然与Servlet API直接耦合
开发中优先使用ActionContext 这样可以避免耦合
package com.itheima.actions
import javax.servlet.ServletContext
import javax.servlet.http.HttpServletRequest
import javax.servlet.http.HttpServletResponse
import javax.servlet.jsp.PageContext
import org.apache.struts2.ServletActionContext
import org.apache.struts2.interceptor.ServletRequestAware
import com.opensymphony.xwork2.ActionSupport
public class ServletAPIAction1 extends ActionSupport{
//打印当前应用名称到控制台上
//获取ServletAPI有关类的实例
//方式一:
public String execute() throws Exception {
//实际上利用ThreadLocal这个类
//ServletActionContext:记住
HttpServletRequest request = ServletActionContext.getRequest()
System.out.println(request.getContextPath())
PageContext pc = ServletActionContext.getPageContext()
HttpServletResponse response = ServletActionContext.getResponse()
response.getWriter().write(request.getContextPath())
ServletContext sc = ServletActionContext.getServletContext()
System.out.println(sc.getRealPath("/"))
return NONE
3、方式三:(麻烦)实现接口,访问Action时完成注入
ServletContextAware
void setServletContext(javax.servlet.ServletContext context)
ServletRequestAware
void setServletRequest(javax.servlet.http.HttpServletRequest request)
ServletResponseAware
void setServletResponse(javax.servlet.http.HttpServletResponse response)
动作类实现特定的接口。就必须实现特定的方法,调用动作方法前,框架会把响应的对象给注入进来。
package com.itheima.
import javax.servlet.http.HttpServletR
import javax.servlet.http.HttpServletR
import org.apache.struts2.interceptor.ServletRequestA
import org.apache.struts2.interceptor.ServletResponseA
import com.opensymphony.xwork2.ActionS
public class ServletAPIAction2 extends ActionSupport implements ServletRequestAware,ServletResponseAware{
private HttpServletR
private HttpServletR
public void setServletRequest(HttpServletRequest request) {
this.request =
public void setServletResponse(HttpServletResponse response) {
this.response =
public String execute() throws Exception{
response.getWriter().write(request.getContextPath());
return NONE;
原理:是一个拦截器给你注入进来的。struts-default.xml
&interceptor name="servletConfig" class="org.apache.struts2.interceptor.ServletConfigInterceptor"/&
一看源码便知。
配置struts.xml:
&?xml version="1.0" encoding="UTF-8"?&
&!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd"&
/success.jsp
/success.jsp
2、局部和全局结果视图
result元素:指定动作类的动作方法执行完后的结果视图.
- name:字符串,与动作方法返回的值一致。默认是success
- type:指定处理结果的结果类型的别名。(struts-default.xml有定义,共10个)。默认值是dispatcher
Action处理完用户请求后,将返回一个普通字符串整个普通字符串就是一个逻辑视图名,Struts2 根据逻辑视图名,决定响应哪个结果。
Struts2处理结果使用&result&元素配置
局部结果:将&result&作为&action&子元素配置
全局结果:将&result&作为&global-results&元素的子元素配置
配置&result&元素通常需要指定两个属性
该属性指定配置逻辑视图名
该属性指定结果类型
当多个action中都使用到了相同result,这时我们应该把result定义为全局结果。struts1中提供了全局forward,struts2中也提供了相似功能:
/message.jsp
注:局部的会覆盖全局
Struts1中应用范围内action的实例 action是单实例(执行时,现在缓存中查找实例,有用,没有创建新的实例)Struts2中 应用范围内action的实例,每个请求都会创建一个action实例Servlet属于单实例多线程的应用,实例只在初始化时被加载多实例比单实例的优点,不会产生并发问题,但执行速度不如单实例。
/success.jsp
3、Struts2提供的结果视图 (共10个)
&result-type name="dispatcher" class="org.apache.struts2.dispatcher.ServletDispatcherResult" default="true"/&
&result-type name="chain" class="com.opensymphony.xwork2.ActionChainResult"/&
&result-type name="freemarker" class="org.apache.struts2.views.freemarker.FreemarkerResult"/&
&result-type name="httpheader" class="org.apache.struts2.dispatcher.HttpHeaderResult"/&
&result-type name="redirect" class="org.apache.struts2.dispatcher.ServletRedirectResult"/&
&result-type name="redirectAction" class="org.apache.struts2.dispatcher.ServletActionRedirectResult"/&
&result-type name="stream" class="org.apache.struts2.dispatcher.StreamResult"/&
&result-type name="velocity" class="org.apache.struts2.dispatcher.VelocityResult"/&
&result-type name="xslt" class="org.apache.struts2.views.xslt.XSLTResult"/&
&result-type name="plainText" class="org.apache.struts2.dispatcher.PlainTextResult" /&
1. chain:从一个动作转发到另外一个动作
同一个包内的动作转发
/success.jsp
不同包之间的动作转发
/user 给chain的实际处理类注入参数
2. dispatcher:从一个动作转发到另外一个JSP
dispatcher 结果类型是最常用的结果类型, 也是 struts 框架默认的结果类型
该结果类型有一个 location 参数, 它是一个默认参数
dispatcher 结果类型将把控制权转发给应用程序里的某个资源
3. redirect:从一个动作重定向到一个JSP
最明显的是地址栏发生变化。
/success.jsp
4. redirectAction:从一个动作重定向到另外一个动作
action1先将动作重定向到action2,然后action2在转发到success.jsp,地址栏应该显示的是action2.
/success.jsp
5. plainText:以纯文本的形式显示JSP
/success.jsp
6. stream:文件下载
imageInputStream
application/octet-stream
filename=26.jpg
DownLoadAction类
package com.itheima.
import java.io.FileInputS
import java.io.FileNotFoundE
import java.io.InputS
import javax.servlet.ServletC
import org.apache.struts2.ServletActionC
import com.opensymphony.xwork2.ActionS
public class DownLoadAction extends ActionSupport {
private InputStream imageInputS
public InputStream getImageInputStream() {
return imageInputS
public void setImageInputStream(InputStream imageInputStream) {
this.imageInputStream = imageInputS
public String download() throws Exception{
ServletContext sc = ServletActionContext.getServletContext();
String filePath = sc.getRealPath("/WEB-INF/classes/26.jpg");
imageInputStream = new FileInputStream(filePath);
return SUCCESS;
4、自定义结果视图
目标:用一个叫做image的视图,输入随机验证码图片 CAPTCHA,我们首先可以看dispatcher的声明;
public class org.apache.struts2.dispatcher.ServletDispatcherResult extends org.apache.struts2.dispatcher.StrutsResultSupport
public abstract class org.apache.struts2.dispatcher.StrutsResultSupport implements com.opensymphony.xwork2.Result
可以看到dispatch的实现类是继承StrutsResultSupport,而StrutsResultSupport又实现了Resul接口。多以我么可以
1、编写一个类实现com.opensymphony.xwork2.Result,或者继承org.apache.struts2.dispatcher.StrutsResultSupport,这里定义一个类,实现com.opensymphony.xwork2.Result接口
package xgp.struts.
import java.awt.C
import java.awt.F
import java.awt.G
import java.awt.image.BufferedI
import java.util.R
import javax.imageio.ImageIO;
import javax.servlet.http.HttpServletR
import org.apache.struts2.ServletActionC
import com.opensymphony.xwork2.ActionI
import com.opensymphony.xwork2.R
public class CaptchaResult implements Result {
private int
private int
public int getWidth() {
public void setWidth(int width) {
this.width =
public int getHeight() {
public void setHeight(int height) {
this.height =
public void execute(ActionInvocation arg0) throws Exception {
BufferedImage img = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
Graphics g = img.getGraphics();
g.setColor(Color.BLUE);
g.drawRect(0, 0, width, height);
g.setColor(Color.YELLOW);
g.fillRect(1, 1, width-1, height-1);
g.setColor(Color.GRAY);
Random random = new Random();
for(int i=1;i&=20;i++)
g.drawLine(random.nextInt(width), random.nextInt(height), random.nextInt(width), random.nextInt(height));
g.setColor(Color.RED);
g.setFont(new Font("宋体",Font.BOLD|Font.ITALIC,20));
for(int i=1;i&=4;i++)
g.drawString(random.nextInt(10)+"", i*20,20);
HttpServletResponse response = ServletActionContext.getResponse();
response.setContentType("image/jpeg");
ImageIO.write(img, "jpg", response.getOutputStream());
2、自定义的结果视图,(必须先声明后才能使用)
3、就可以使用了,编写视图页面login.jsp
如果想在多个包中用,可以将package声明为abstract ,然后别的包继承自这个包即可。
阶段性小结
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:282029次
积分:5321
积分:5321
排名:第5342名
原创:271篇
转载:19篇
评论:16条
(12)(3)(14)(24)(1)(1)(1)(2)(36)(28)(47)(66)(67)
(window.slotbydup = window.slotbydup || []).push({
id: '4740887',
container: s,
size: '250,250',
display: 'inlay-fix'}

我要回帖

更多关于 动作类单机游戏 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信