0

我在使用 cocos2d for Android 时遇到问题。我尝试了多种方法,但似乎无法让精灵在屏幕上移动。两张图片都显示了,但电脑精灵没有移动。运行代码时没有出现任何错误,但是除了显示没有移动的两张图片之外,什么也没有发生。

    package com.example.minigameapp;

import java.util.Random;

import org.cocos2d.actions.instant.CCCallFuncN;
import org.cocos2d.actions.interval.CCMoveTo;
import org.cocos2d.actions.interval.CCSequence;
import org.cocos2d.layers.CCColorLayer;
import org.cocos2d.layers.CCScene;
import org.cocos2d.nodes.CCDirector;
import org.cocos2d.nodes.CCSprite;
import org.cocos2d.types.CGPoint;
import org.cocos2d.types.CGSize;
import org.cocos2d.types.ccColor4B;


import android.util.Log;

public class GameLayer extends CCColorLayer{
    CCSprite _player;
    CCSprite _computer;
    public static CCScene scene()
    {
        CCScene scene = CCScene.node();
        CCColorLayer layer = new GameLayer(ccColor4B.ccc4(255, 255, 255, 255));

        scene.addChild(layer);

        return scene;
    }

    protected GameLayer(ccColor4B color)
    {
        super(color);
        this.setIsTouchEnabled(true);
        CGSize winSize = CCDirector.sharedDirector().displaySize();

        _player = CCSprite.sprite("race_car2.png");
        _computer = CCSprite.sprite("race_car.png");
        _player.setPosition(CGPoint.ccp(_player.getContentSize().width / 2.0f, winSize.height / 2.0f));
        _computer.setPosition(CGPoint.ccp(_computer.getContentSize().width / 2.0f,winSize.height / 2.0f + _player.getContentSize().height*3));


        addChild(_player);
        addChild(_computer);
        this.schedule("moveComputer",1.0f);
    }
    public void moveComputer(){
        CGSize winSize = CCDirector.sharedDirector().displaySize();
        float finalX=winSize.width;

        // Determine speed of the target
        Random rand = new Random();
        int minDuration = 2;
        int maxDuration = 15;
        int rangeDuration = maxDuration - minDuration;
        //int actualDuration = rand.nextInt(rangeDuration) + minDuration;
        int actualDuration=1;

        Log.d("GameLayer","Set Action");
        //CCMoveTo actionMove = CCMoveTo.action(actualDuration, CGPoint.ccp(-computer.getContentSize().width / 2.0f, finalX));
        //CCCallFuncN actionMoveDone = CCCallFuncN.action(this, "spriteMoveFinished");
        //CCSequence actions = CCSequence.actions(actionMove, actionMoveDone);
        //computer.runAction(actions);
        CGPoint point = CGPoint.ccp(finalX,winSize.height / 2.0f + _player.getContentSize().height*3);
        CCMoveTo actionMove = CCMoveTo.action(10, point);
        _computer.runAction(actionMove);
        Log.d("GameLayer", "Start Moving");
    }

    public void spriteMoveFinished(Object sender)
    {
        Log.d("GameLayer", "Finished Moving");
        //CCSprite sprite = (CCSprite)sender;
        //this.removeChild(sprite, true);
        this.removeChild(_computer, true);
        Log.d("GameLayer", "Remove Sprite");
    }
}
4

2 回答 2

1

你已经固定了 CGPoint 的位置

CGPoint point = CGPoint.ccp(finalX,winSize.height / 2.0f + _player.getContentSize().height*3);
        CCMoveTo actionMove = CCMoveTo.action(10, point);

您还必须在每个计划中更改 CGPoint 值。

您的计划方法正在运行,但每次调用方法时 CG 点值都相同,并且您使用了 CCMoveTo 将精灵移动到屏幕上的特定位置。所以精灵已经在你想要移动的位置,所以看起来静止(未移动)。

每次调用调度方法时更改 CGPoint 值...

您可以通过将 CGPoint 值替换为

CGPoint point = CGPoint.ccp(finalX+(100*Math.random()),winSize.height / 2.0f + player.getContentSize().height*3+(100*Math.random()));
于 2013-01-05T05:52:36.683 回答
0

一个小错误,即在moveComputer()你没有传递argumets.pass像下面这样的参数时,你的对象会移动

public void moveComputer(float dt)
{
  //
}
于 2013-01-03T11:26:00.173 回答