2016-05-04 91 views
-2

我想将游戏活动转换为游戏片段。任何人都可以帮助我吗?
这是游戏活动:如何将活动转换为片段?

public class Game extends BaseGameActivity implements IOnSceneTouchListener, Observer{ 
    private static int CAMERA_HEIGHT = 480; 
    private static int CAMERA_WIDTH = 800; 
    private Camera mCamera; 
    private TiledTextureRegion ballTextureRegion; 
    private Texture paddleTexture; 
    private Texture ballTexture; 
    private Paddle paddle; 
    private GameHolder gameHolder; 
    private Object mCurViewMode; 
    public Engine onLoadEngine() 
    { 
     final Display defaultDisplay = getWindow().getWindowManager().getDefaultDisplay(); 
     CAMERA_WIDTH = defaultDisplay.getWidth(); 
     CAMERA_HEIGHT = defaultDisplay.getHeight(); 
     this.mCamera = new Camera(0, 0, CAMERA_WIDTH, CAMERA_HEIGHT); 
     return new Engine(new EngineOptions(true, ScreenOrientation.PORTRAIT, new RatioResolutionPolicy(CAMERA_WIDTH, CAMERA_HEIGHT), this.mCamera)); 
    } 

    @Override 
    public void onLoadResources() 
    { 
     gameHolder = GameHolder.getInstance(); 
     gameHolder.addObserver(this); 
     gameHolder.setGameActivity(this); 

     this.ballTexture = new Texture(64, 64, TextureOptions.BILINEAR_PREMULTIPLYALPHA); 
     this.paddleTexture = new Texture(1024, 1024, TextureOptions.BILINEAR_PREMULTIPLYALPHA); 

     TextureRegionFactory.setAssetBasePath("gfx/"); 

     this.ballTextureRegion = TextureRegionFactory.createTiledFromAsset(this.ballTexture, this, "ball.png", 0, 0, 1, 1); 

     this.mEngine.getTextureManager().loadTexture(this.paddleTexture); 
     this.mEngine.getTextureManager().loadTexture(this.ballTexture); 
    } 
    @Override 
    public Scene onLoadScene() 
    { 
     this.mEngine.registerUpdateHandler(new FPSLogger()); 

     final Scene scene = new Scene(1); 
     scene.setBackground(new ColorBackground(0f, 0f, 0f)); 
     scene.setOnSceneTouchListener(this); 

     final Ball ball = new Ball(CAMERA_WIDTH/2, CAMERA_HEIGHT-30-16, this.ballTextureRegion, mEngine); 
     ball.setVelocity(100.0f, 100.0f); 

     scene.getTopLayer().addEntity(ball); 

     paddle = new Paddle(CAMERA_WIDTH/2, CAMERA_HEIGHT-50, CAMERA_HEIGHT/8, CAMERA_WIDTH/34); 

     final Brick[][] bricks = new Brick[5][5]; 

     for (int i = 0; i < bricks.length; i++) { 
      for (int j = 0; j < bricks[0].length; j++) { 
       bricks[i][j]= new Brick(10+j*CAMERA_WIDTH/5, 10+i*CAMERA_HEIGHT/15 , CAMERA_HEIGHT/16, CAMERA_WIDTH/32); 
       scene.getTopLayer().addEntity(bricks[i][j]); 
      } 
     } 

     scene.getTopLayer().addEntity(paddle); 
     scene.getTopLayer().addEntity(ball); 
     scene.registerTouchArea(paddle); 

     /* The actual collision-checking. */ 
     scene.registerUpdateHandler(new IUpdateHandler() { 
      public void reset() { } 

      public void onUpdate(final float pSecondsElapsed) { 
       if(ball.collidesWith(paddle)) { 
        ball.bounceWithRectangle(paddle); 
       } 
       else if (ball.getY() >= Game.getCAMERA_HEIGHT() - 30) { 
        scene.setBackground(new ColorBackground(255f, 0f, 0f)); 
        Log.w("Game.java","Game Over"); 
       } 
       else { 
        for (int i = 0; i < bricks.length; i++) { 
         for (int j = 0; j < bricks[0].length; j++) { 
          scene.setBackground(new ColorBackground(0f, 0f, 0f)); 
          if(ball.collidesWith(bricks[i][j])) { 
           bricks[i][j].setPosition(CAMERA_HEIGHT+20, CAMERA_WIDTH+20); 
           scene.getTopLayer().removeEntity(bricks[i][j]); 
           ball.bounceWithRectangle(bricks[i][j]); 

          } 
         } 
        } 
       } 
      } 
     }); 

     return scene; 
    } 

    public static int getCAMERA_HEIGHT() { 
     return CAMERA_HEIGHT; 
    } 
    public static int getCAMERA_WIDTH() { 
     return CAMERA_WIDTH; 
    } 

    @Override 
    public void onLoadComplete() { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public boolean onSceneTouchEvent(Scene pScene, TouchEvent pSceneTouchEvent) { 
     paddle.setPosition(pSceneTouchEvent.getX() - paddle.getWidth()/2, Game.getCAMERA_HEIGHT()-30); 
     return true; 
    } 

    protected void onPause() { 
     super.onPause(); 
     //commented on error 
     //gameHolder.setGameState(gameHolder.getPausedGameState()); 
    } 

    @Override 
    public void update(Observable observable, Object data) { 
     // TODO Auto-generated method stub 

    } 
} 
+0

[与来自活性移植到片段卡住](http://stackoverflow.com/questions/10013023/stuck-with-porting-from-activity-to-fragment) – jobbert

+0

改变装置的可能的复制...你是否想在活动中添加片段? –

+0

我想片段不活动。但这个游戏是在BaseGameActivity。所以我需要转换它在游戏片段。 – Mhandroid

回答

1

你可以改变你的活动为碎片是这样的:

public class FragmentClass extends Fragment 
{ 
    private View view; 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
    {    
     view = (View) inflater.inflate(R.layout.layout_history, container,false); 

     //Do all things which you want to implement //enter code here 
     return view; 
    } 
} 

您需要延长片段并覆盖其onCreateView(LayoutInflater, ViewGroup, Bundle)方法。 使用上面的布局和返回视图对它进行膨胀。

您也可以使用它的视图中创建该片段的成员,并使用通过上下文:

getActivity(); 

如果你想使用findViewById(int)那么你可以使用它像:

getView().findViewById(int); 

如果你想要知道更多关于此,然后去:http://developer.android.com/guide/components/fragments.html & http://developer.android.com/reference/android/app/Fragment.html#Lifecycle

您可以像下面那样创建自定义片段。在完成所有这些之后,您可以使用片段类中的getActivity()方法。

而关于你的方法的错误,那么你必须使用当前片段类的上下文。
例如,如果你想使用的TextView则:

TextView tv = (TextView) context.findViewById(R.id.textView); 

我显示例如如何使用BaseActivity使片段:

  1. public class MainActivity extends BaseActivity 
    { 
        private FragmentClass fragmentClass; 
        private ViewPager mViewPager; 
    
        private SlidingTabLayout mSlidingTabLayout; 
    
        @Override 
        protected void onCreate(Bundle savedInstanceState) 
        { 
         super.onCreate(savedInstanceState); 
         //Do all stub 
         populateView(); 
        } 
    
        private void populateView() 
        { 
         mViewPager = (ViewPager) findViewById(R.id.pager1); 
         mViewPager.setOffscreenPageLimit(2); 
         mViewPager.setAdapter(new ViewPagerAdapter(getSupportFragmentManager())); 
         mSlidingTabLayout = (SlidingTabLayout) findViewById(R.id.sliding_tabs); 
         mSlidingTabLayout.setDividerColors(color); 
         mSlidingTabLayout.setCustomTabView(R.layout._custom_tab, 0); 
         mSlidingTabLayout.setViewPager(mViewPager); 
        } 
    
        class ViewPagerAdapter extends FragmentPagerAdapter 
        { 
         public ViewPagerAdapter(FragmentManager fm) 
         { 
          super(fm); 
          // TODO Auto-generated constructor stub 
         } 
    
         @Override 
         public Fragment getItem(int pos) 
         { 
          if(pos==0) 
          { 
           fragmentClass = new FragmentClass(); 
           return fragmentClass; 
          } 
          return null;     
         } 
    
         @Override 
         public int getCount() 
         { 
          // TODO Auto-generated method stub 
          return 1; 
         } 
        } 
    } 
    

    从developer.android添加两个班滑动标签版式

  2. 滑动版TabStrip

http://developer.android.com/samples/SlidingTabsBasic/src/com.example.android.common/view/SlidingTabLayout.html

+0

你见过整个游戏活动吗? – Mhandroid

+0

当我通过片段替换BaseGameActivity时,它会产生很多错误。我认为这是因为所有的功能像Engine onLoadEngine(),Scene onLoadScene()...链接到BaseGameActivity。 – Mhandroid

+0

是的,你是对的!!不要在同一类中实现片段。像上面的代码一样,你可以使用你的BaseActivity和那些被覆盖的方法,你也可以使用你的片段。 –